[Step. 23] 닷넷에서 HalfNetwork를 사용하자 – 4

C++/CLI 2011. 1. 17. 09:00 Posted by 알 수 없는 사용자

C++/CLI용의 클래스 라이브러리 프로젝트를 생성합니다.

저는 HalfNetwork_NET 이라는 이름으로 만들었습니다.

 

프로젝트 설정 하기

앞서 C++에서 만든 HalfNetwork lib 파일을 사용하기 위해 프로젝트 속성에서 몇 가지를 설정합니다.

 

1. HalfNetwork 프로젝트의 헤더 파일을 포함합니다.


 

2. lib 파일의 위치를 설정합니다.


 

이것으로 프로젝트 설정은 끝났습니다.

 

 

코딩 하기

HalfNetwork_NET 프로젝트는 아주 간단하게 만들 생각이므로(만약 실전에서 사용한다면 사용할 프로젝트에 맞게 필요한 기능을 만들어야겠죠) 저는 총 6개의 파일만 사용합니다.

자세한 내용은 첨부되는 코드를 직접 보시기 바라며 여기서는 간단한 설명만 하겠습니다.

 

Stdafx.h

ErrorCode.h

ServerNetwork.h

ServerNetwork.cpp

HalfNetwork_NET.h

HalfNetwork_NET.cpp

 

 

Stdafx.h

여기에서는 HalfNetwork를 사용하기 위해 필요한 파일을 포함합니다.

#include <stdio.h>

#include <string>

#include <vector>

 

#include <ace/Singleton.h>

#include <ace/ace.h>

#include "HalfNetworkType.h"

#include "HalfNetworkDefine.h"

 

 

ErrorCode.h

에러 코드 값을 선언한 파일입니다.

참고로 enum을 사용하지 않고 literal을 사용했는데 이유는 enum을 정의할 때 타입을 지정했는데도 사용할 때 타입캐스팅을 요구해서(왜 그런지 잘 모르겠네요) 사용하기 편하기 위해서 C++에서 const와 같은 역할을 할 literal을 사용했습니다.


 

ServerNetwork.h, ServerNetwork.cpp

아주 단순하게 네트웍으로 리모트에 Send하는 기능만 가지고 있습니다.

HalfNetwork Send를 사용하기 위해서는 네트웍으로 보낼 데이터를 ACE_Message_Block 객체를 만든 후 복사합니다.

bool ServerNetwork::Send( const DWORD StreamID, array<Byte>^ SendData )

{

           int nLength = SendData->Length;

           pin_ptr<Byte> pData = &SendData[0];

                    

           ACE_Message_Block* block = NetworkInstance->AllocateBlock( nLength );

           block->copy( (const char*)pData, nLength );

           NetworkInstance->SendRequest( StreamID, block );

 

           pData = nullptr;

           return true;

}

 파라미터 중 StreamID는 연결된 세션의 인덱스이고 SendData는 보낼 데이터입니다.

 

 

이번 회는 여기까지 하고 나머지는 다음 회에 이어서 설명하겠습니다.