Server Communication System 설계

jjuiddong
이동: 둘러보기, 찾기

Server Communication System 설계

  • NetworkSystem
    • N개의 NetGroupController 를 가진다. config 파일을 읽어서 NetGroupController를 생성한다.
    • ReadConfigFile( filename )
    • private AddNetGroupController( NetGroupController )
    • private Remove~
    • private Get~
    • private Clear~
    • AddNetGroupListener(
    • Remove~
    • Get~
    • Clear~
  • Netconnector 일반화작업
    • 이 클래스를 상속 받으면, 객체가 연결한 connector나 하위 자식으로 연결된 connector와 그룹이 맺어지고, 그룹 전체에게 패킷을 보내거나, 특정 멤버에게 패킷을 보낼 수 있게 된다.
    • Connector
    • 가상 Client
    • NetGroupController
    • Group& GetGroup( groupid )
    • RemoteClient& GetRemoteClient( netid )
  • NetGroupController
    • server,client,p2p를 관리하는 클래스, 이객체가 NetworkSystem에 저장되고, 실제 server, client, p2p인스턴스를 생성하고, 제거하는 클래스다.
    • config 파일에 등록된 group 갯수만큼 생성된다.
    • NetConnector& GetConnector( typestring )
  • NetGroupListener
    • member typeString = ex) balancesvr, lobbysvr, gamesvr
    • Group& GetGroup( groupid )
    • NetConnector& GetConnector()
    • Group& GetGroup( groupid )
    • RemoteHost& GetRemoteHost( netid )
    • AddProtocolListener
    • Remove~
    • Clear~
    • AddEventListener()
    • Remove~
    • Clear~
  • Server,Client,P2p EventListener 통합
  • 가상Client
    • N개의 Client의 패킷을 받는다.
    • 공통된 프로토콜을 받아서, 데이타를 구성한다.
    • 외부에서는 N개의 Client를 접근하는 일없이, 가상Client만 접근하면 모든 정보를 얻어올 수 있게 한다.
    • interface를 상속받아 구현하고, 꼭 필요한 데이타만 가지게 한다. N개의 Client를 가질 필요는 없다. 인터페이스 형식이기 때문에, 패킷만 받고 관리하는 객체가 되어야 한다.
    • 다른 부분에서도 쓸수 있게하자. (CClient, CClientBasic)

고민해야 할 거리들

- 어떻게 쉽게 그룹화해서 Connector를 통해 패킷을 전달할 것인가? - 그룹화가 유용한가? - Connector에서 어떻게 server, client, p2p 멤버를 접근할 것인가? - 어떤 플로우를 통해서 ConnectorController가 생성되고 제거되는가?

몇가지 문제거리들

  • 그룹에 있는 특정 connector에게 어떻게 메세지를 보낼 것인가?
  • 쓰레드 동기화 문제는 어떻게 해결할 것인가?
  • N개의 client를 가질 때, 데이타 중복문제는 어떻게 해결할 것인가?
    • 가상 client를 만들어서 관리한다.
개인 도구
이름공간

변수
행위
둘러보기
도구모음