"서버 프로그램 구조"의 두 판 사이의 차이
jjuiddong
(→Lib) |
|||
(한 사용자의 중간의 편집 10개 숨겨짐) | |||
2번째 줄: | 2번째 줄: | ||
== ''' Controller ''' == | == ''' 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에 저장한다. | ||
+ | |||
+ | == ''' ErrorReport ''' == | ||
+ | * 에러 처리 함수들 모음 | ||
+ | |||
+ | # ''' Error ''' | ||
+ | #* 에러를 메세지박스로 출력하거나, 로그로 남긴다. | ||
+ | |||
+ | == ''' ServerApp 라이브러리 ''' == | ||
+ | |||
+ | == ''' DataStructure ''' == | ||
+ | * 서버에서 쓰이는 자료 객체 클래스들의 모음 | ||
+ | |||
+ | # ''' CRoomLobby ''' | ||
+ | #* 로비서버에 존재하는 방정보를 정의한다. | ||
+ | #* CRoom 클래스를 상속받는다. | ||
+ | # ''' CUserLobby ''' | ||
+ | #* 로비 서버에 있는 유저를 정의한다. | ||
+ | #* CUser 클래스를 상속받는다. | ||
+ | |||
+ | == ''' Lib ''' == | ||
+ | * 서버 응용 단 | ||
+ | |||
+ | # ''' CChatServer ''' | ||
+ | #* 채팅 서버 | ||
+ | # ''' CLobbyServer ''' | ||
+ | #* 로비 서버 | ||
+ | # ''' CServerLauncher ''' | ||
+ | #* 서버 실행 스크립트 객체 | ||
+ | #* config 파일을 읽어서 해당 서버를 실행시킨다. |
2013년 3월 2일 (토) 22:18 기준 최신판
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에 저장한다.
[편집] ErrorReport
- 에러 처리 함수들 모음
- Error
- 에러를 메세지박스로 출력하거나, 로그로 남긴다.
[편집] ServerApp 라이브러리
[편집] DataStructure
- 서버에서 쓰이는 자료 객체 클래스들의 모음
- CRoomLobby
- 로비서버에 존재하는 방정보를 정의한다.
- CRoom 클래스를 상속받는다.
- CUserLobby
- 로비 서버에 있는 유저를 정의한다.
- CUser 클래스를 상속받는다.
[편집] Lib
- 서버 응용 단
- CChatServer
- 채팅 서버
- CLobbyServer
- 로비 서버
- CServerLauncher
- 서버 실행 스크립트 객체
- config 파일을 읽어서 해당 서버를 실행시킨다.