"MadSoccer 설계 고민들"의 두 판 사이의 차이

jjuiddong
이동: 둘러보기, 찾기
(새 문서: = Server Communication System 설계 = * NetworkSystem ** N개의 NetGroupController 를 가진다. config 파일을 읽어서 NetGroupController를 생성한다. ** ReadConfigFile( ...)
 
(문서를 비움)
 
(한 사용자의 중간의 편집 1개 숨겨짐)
1번째 줄: 1번째 줄:
= 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를 만들어서 관리한다.
 

2013년 4월 1일 (월) 20:23 기준 최신판

개인 도구
이름공간

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