서버 프로그램 구조
jjuiddong
Network 라이브러리
목차 |
Controller
- 네트워크 통신을 제어하는 클래스들
- CNetConnector
- 통신하는 객체, 예를들어 CServer, CClient 는 이 클래스를 상속받아 구현한다.
- 네트워크 통신에 필요한 정보와 기능들을 가진다.
- CNetController
- 싱글톤 클래스
- 네트워크 통신에 필요한 쓰레드와, 서버, 클라이언트 객체를 관리한다.
- Dispatcher를 관리한다. 받고 싶은 프로토콜의 Dispatcher를 등록해야 서버가 해당 프로토콜을 받아서 분석할 수 있다.
- Accept, Work, Logic 쓰레드를 관리한다. 서버당 각각 1개씩 쓰레드를 생성하므로, 3개의 쓰레드를 가진다. 서버가 2개 생성되면 쓰레드는 6개가 된다.
- 서버/클라이언트 둘 모두에게 쓰이는 객체다.
- CNetLauncher
- 싱글톤 클래스
- CNetController 에서만 쓰인다.
- 서버를 생성하거나, 클라이언트가 서버에 접속할 때 쓰이는 api를 따로 분리시킨것이다.
- CRemoteClient
- 서버에 접속된 클라이언트 정보를 가진다.
- 서버 측에서만 쓰인다.
DataStructure
- 서버에서 쓰이는 데이타 객체들
- CCharacter
- CUser 가 소유한 캐릭터 정보를 가진다.
- CGroup
- 여러 명의 CUser를 관리한다.
- CRoom 안에 하나이상의 CGroup 이 존재한다.
- CPacket
- 네트워크 통신에 쓰이는 패킷을 정의한다.
- CPacketQueue
- 싱글톤 클래스다.
- 패킷을 받아서 큐에 저장하는 역할을 한다.
- 서버/ 클라이언트 모두에게 쓰인다.
- CTaskWork, CTaskLogic 쓰레드에서 쓰인다.
- CRoom
- 방 정보를 정의한다.
- CGroup 을 관리한다.
- CUser
- 유저정보를 정의한다.
- CCharacter 를 관리한다.
Interface
- IProtocol
- 서버와 클라이언트 간에 주고받는 프로토콜의 인터페이스를 정의한다.
- 프로토콜들은 이 인터페이스를 상속받아 구현된다.
- ProtocolCompiler 가 프로토콜을 자동 생성한다. 이때 IProtocol을 상속받은 클래스를 만든다.
- IProtocolDispatcher
- 네트워크로부터 받은 패킷을 해당하는 프로토콜에 맞게 분석해서 Listener의 함수를 호출한다.
- ProtocolCompiler에 의해 자동 생성되는 Dispatcher 들은 이 인터페이스를 상속받아 생성된다.
- IProtocolListener
- 프로토콜을 받아 처리하는 역할을 한다.
- ProtocolCompiler 가 생성하는 Listener 들은 이 인터페이스를 상속받아 생성된다.
PrtCompiler
- 프로토콜 컴파일러
- 개발자가 작성한 *.prt 파일을 분석해서 Protocol, Dispatcher, Listener 클래스를 생성한다. 이 코드는 바로 개발환경에서 사용할 수 있도록 만들어 진다.
- ProtocolParser
- *.prt 프로토콜 스크립트를 분석해서 구문트리를 만든다.
- ProtocolScanner
- *.prt 프로토콜 스크립트를 토큰별로 구분한다.
Service
- 네트워크 통신 라이브러리에서 응용 단에서 쓰일 클래스를 묶어 놓은 개념이다.
- all::Protocol
- 모든 프로토콜의 패킷을 보낼 수 있는 프로토콜이다.
- all::Dispatcher
- 모든 프로토콜의 패킷을 보낼 수 있는 프로토콜이다.
- all::ProtocolListener
- 모든 프로토콜의 패킷을 받을 수 있는 프로토콜이다.
- CClient
- 서버에 접속하는 클라이언트를 정의한다.
- CNetConnector를 상속받는다.
- CServer
- CClient의 접속을 받을 서버를 정의한다.
- CNetConnector를 상속받는다.
- CRemoteClient를 관리한다. (클라이언트가 접속하면 저장된다.)
Task
- 서버 쓰레드에서 작업하는 태스크의 묶음
- CTaskAccept
- 클라이언트를 받아서 소켓을 서버에게 넘겨준다.
- CTaskLogic
- CPacketQueue 에서 패킷을 가져와 파싱해서 Listener에 등록된 객체에게 메세지를 보낸다.
- CTaskWork
- 클라이언트로부터 패킷을 받아서 CPacketQueue에 저장한다.