서버 프로그램 구조

jjuiddong
Jjuiddong (토론 | 기여) 사용자의 2013년 3월 2일 (토) 22:18 판

(비교) ← 이전 판 | 최신판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 찾기

Network 라이브러리

목차

Controller

  • 네트워크 통신을 제어하는 클래스들
  1. CNetConnector
    • 통신하는 객체, 예를들어 CServer, CClient 는 이 클래스를 상속받아 구현한다.
    • 네트워크 통신에 필요한 정보와 기능들을 가진다.
  2. CNetController
    • 싱글톤 클래스
    • 네트워크 통신에 필요한 쓰레드와, 서버, 클라이언트 객체를 관리한다.
    • Dispatcher를 관리한다. 받고 싶은 프로토콜의 Dispatcher를 등록해야 서버가 해당 프로토콜을 받아서 분석할 수 있다.
    • Accept, Work, Logic 쓰레드를 관리한다. 서버당 각각 1개씩 쓰레드를 생성하므로, 3개의 쓰레드를 가진다. 서버가 2개 생성되면 쓰레드는 6개가 된다.
    • 서버/클라이언트 둘 모두에게 쓰이는 객체다.
  3. CNetLauncher
    • 싱글톤 클래스
    • CNetController 에서만 쓰인다.
    • 서버를 생성하거나, 클라이언트가 서버에 접속할 때 쓰이는 api를 따로 분리시킨것이다.
  4. CRemoteClient
    • 서버에 접속된 클라이언트 정보를 가진다.
    • 서버 측에서만 쓰인다.

DataStructure

  • 서버에서 쓰이는 데이타 객체들
  1. CCharacter
    • CUser 가 소유한 캐릭터 정보를 가진다.
  2. CGroup
    • 여러 명의 CUser를 관리한다.
    • CRoom 안에 하나이상의 CGroup 이 존재한다.
  3. CPacket
    • 네트워크 통신에 쓰이는 패킷을 정의한다.
  4. CPacketQueue
    • 싱글톤 클래스다.
    • 패킷을 받아서 큐에 저장하는 역할을 한다.
    • 서버/ 클라이언트 모두에게 쓰인다.
    • CTaskWork, CTaskLogic 쓰레드에서 쓰인다.
  5. CRoom
    • 방 정보를 정의한다.
    • CGroup 을 관리한다.
  6. CUser
    • 유저정보를 정의한다.
    • CCharacter 를 관리한다.


Interface

  1. IProtocol
    • 서버와 클라이언트 간에 주고받는 프로토콜의 인터페이스를 정의한다.
    • 프로토콜들은 이 인터페이스를 상속받아 구현된다.
    • ProtocolCompiler 가 프로토콜을 자동 생성한다. 이때 IProtocol을 상속받은 클래스를 만든다.
  2. IProtocolDispatcher
    • 네트워크로부터 받은 패킷을 해당하는 프로토콜에 맞게 분석해서 Listener의 함수를 호출한다.
    • ProtocolCompiler에 의해 자동 생성되는 Dispatcher 들은 이 인터페이스를 상속받아 생성된다.
  3. IProtocolListener
    • 프로토콜을 받아 처리하는 역할을 한다.
    • ProtocolCompiler 가 생성하는 Listener 들은 이 인터페이스를 상속받아 생성된다.

PrtCompiler

  • 프로토콜 컴파일러
  • 개발자가 작성한 *.prt 파일을 분석해서 Protocol, Dispatcher, Listener 클래스를 생성한다. 이 코드는 바로 개발환경에서 사용할 수 있도록 만들어 진다.
  1. ProtocolParser
    • *.prt 프로토콜 스크립트를 분석해서 구문트리를 만든다.
  2. ProtocolScanner
    • *.prt 프로토콜 스크립트를 토큰별로 구분한다.

Service

  • 네트워크 통신 라이브러리에서 응용 단에서 쓰일 클래스를 묶어 놓은 개념이다.
  1. all::Protocol
    • 모든 프로토콜의 패킷을 보낼 수 있는 프로토콜이다.
  2. all::Dispatcher
    • 모든 프로토콜의 패킷을 보낼 수 있는 프로토콜이다.
  3. all::ProtocolListener
    • 모든 프로토콜의 패킷을 받을 수 있는 프로토콜이다.
  4. CClient
    • 서버에 접속하는 클라이언트를 정의한다.
    • CNetConnector를 상속받는다.
  5. CServer
    • CClient의 접속을 받을 서버를 정의한다.
    • CNetConnector를 상속받는다.
    • CRemoteClient를 관리한다. (클라이언트가 접속하면 저장된다.)

Task

  • 서버 쓰레드에서 작업하는 태스크의 묶음
  1. CTaskAccept
    • 클라이언트를 받아서 소켓을 서버에게 넘겨준다.
  2. CTaskLogic
    • CPacketQueue 에서 패킷을 가져와 파싱해서 Listener에 등록된 객체에게 메세지를 보낸다.
  3. CTaskWork
    • 클라이언트로부터 패킷을 받아서 CPacketQueue에 저장한다.

ErrorReport

  • 에러 처리 함수들 모음
  1. Error
    • 에러를 메세지박스로 출력하거나, 로그로 남긴다.

ServerApp 라이브러리

DataStructure

  • 서버에서 쓰이는 자료 객체 클래스들의 모음
  1. CRoomLobby
    • 로비서버에 존재하는 방정보를 정의한다.
    • CRoom 클래스를 상속받는다.
  2. CUserLobby
    • 로비 서버에 있는 유저를 정의한다.
    • CUser 클래스를 상속받는다.

Lib

  • 서버 응용 단
  1. CChatServer
    • 채팅 서버
  2. CLobbyServer
    • 로비 서버
  3. CServerLauncher
    • 서버 실행 스크립트 객체
    • config 파일을 읽어서 해당 서버를 실행시킨다.
개인 도구
이름공간

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