HalfNetwork_NET.h, HalfNetwork_NET.cpp

 

HalfNetwork ACE를 사용하고 있습니다. 그래서 프로그램이 시작할 때 ACE ACE::Init()를 호출하고, 종료하기 전에는 ACE::fini()를 호출해야 합니다. 이 두 함수는 각각

static void Init_ACE();

static void End_ACE();

에서 호출하고 있습니다.

 

 

네트웍 설정 및 소켓 생성 및 사용은

short Opne();

에서 합니다.

 

내용을 보면 네트웍 설정 정보를 ini 파일을 읽어서 설정합니다.

ini 파일의 내용은 아래와 같습니다.

server_port=15001;

client_port=25251;

workerthread=0;

receivebufferlength=2048;

updateterm=20;

 

server_receive_buff_size=65536;

client_receive_buff_size=4096;

 

client_init_accept_count=126;

 

그리고 이 라이브러리는 서버에서 사용하는 것을 생각했기 때문에 서버-클라이언트 연결과 서버-서버 연결을 가정하여 클라이언트 접속을 위한 Port와 서버 접속을 위한 Port 두 개를 생성합니다.

 

Windows 플랫폼에서는 네트웍 성능을 최대한 내기 위해서는 IOCP를 사용해야 합니다.

HalfNetwork에서 IOCP를 사용하기 위해서는 Proactor 방식을 사용해야 합니다.

if( false == NetworkInstance->Create<HalfNetwork::ProactorFactory>() )

{

          return ERRORCODE::CREATE_PROACTORFACTORY;

}

 

 

설정 작업이 끝나면 Port를 오픈합니다.

if( false == NetworkInstance->Open(&config) ) {

        return ERRORCODE::SERVER_OPEN;

}

 

 

리모트에서 온 데이터를 받기 위해서는

void ProcessRecvQueue();

를 호출합니다.

 

서버가 종료되기 전까지는 ProcessRecvQueue();는 계속 호출해야합니다.

그래서 ProcessRecvQueue() Update()에서 호출하고 있습니다.

 

 

리모트의 접속, 데이터 받기, 연결 끊어짐을 처리하기 위해서는 HalfNetwork_NET 클래스를 상속 받은 클래스가 아래의 함수를 재정의 해야합니다.

virtual void OnAccept_Client( unsigned int StreamID, String^ IP ) abstract;

virtual void OnRead_Client( unsigned int StreamID, array<Byte>^ RecvData ) abstract;

virtual void OnDisConnect_Client( unsigned int StreamID ) abstract;

virtual void OnAccept_Server( unsigned int StreamID, String^ IP ) abstract;

virtual void OnRead_Server( unsigned int StreamID, array<Byte>^ RecvData ) abstract;

virtual void OnDisConnect_Server( unsigned int StreamID ) abstract;

 

이것으로 간단하게 HalfNetwork 라이브러리를 사용하기 위해 닷넷용 클래스 라이브러리를 만드는 것은 끝났습니다.

다음에는 C#으로 이것을 사용하도록 해보겠습니다.

 

 

저작자 표시
신고