HalfNetwork_NET.h, HalfNetwork_NET.cpp
HalfNetwork는 ACE를
사용하고 있습니다. 그래서 프로그램이 시작할 때 ACE의 ACE::Init()를 호출하고, 종료하기 전에는 ACE::fini()를 호출해야 합니다. 이 두 함수는 각각
static void Init_ACE();
static void End_ACE();
에서 호출하고 있습니다.
네트웍 설정 및 소켓 생성 및 사용은
에서 합니다.
내용을 보면 네트웍 설정 정보를 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;
}
리모트에서 온 데이터를 받기 위해서는
를 호출합니다.
서버가 종료되기 전까지는 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#으로 이것을 사용하도록 해보겠습니다.
'C++/CLI' 카테고리의 다른 글
Native C++ 개발자를 위한 C++/CLI (3) | 2011.04.20 |
---|---|
[Step. 25] 닷넷에서 HalfNetwork를 사용하자 – 6(마지막) (4) | 2011.01.31 |
[Step. 23] 닷넷에서 HalfNetwork를 사용하자 – 4 (3) | 2011.01.17 |
[Step. 22] 닷넷에서 HalfNetwork를 사용하자 – 3 (4) | 2011.01.10 |
[Step. 21] 닷넷에서 HalfNetwork를 사용하자 - 2 (0) | 2010.12.30 |