|
|
(한 사용자의 중간의 편집 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를 만들어서 관리한다.
| |