프라우드넷 스터디 1

2017. 8. 1. 15:57기술/네트워크

반응형

프라우드넷 설치

프라우드넷 도움말

일단 프라우드넷을 익히기 위해 유니티 프라우드넷 튜토리얼 동영상 참고 합니다. 

이 튜토리얼을 통해 프라우드넷 동작을 익히며 함수를 수정하여 프로젝트에 적용할 예정입니다.

다음에 다시 작업할 때 기억하기 위해 홈페이지에 기록해 둡니다.


1. GameObject 생성 및 스크립트 추가 (언리얼 엔진에서는 일단 Actor 클래스에서 상속받아서 클래스 생성)

2. GUI로 버튼과 TextFiled등을 생성 (언리얼 엔진에서는?)

3. ProudDotNetClient.dll을 Assets 폴더에 포함 (언리얼 엔진에서는?)

   프라우드넷 모듈을 유니티에서 바로 사용 가능합니다. 요점은 프라우드넷 API 사용을 위한 라이브러리 설정입니다.



유니티 클라이언트 코드 입니다.

주요 함수로는 Update()에 m_netClient.FrameMove() 함수, m_netClient.Connect()에 NetConnectionParam 설정후 매개변수로 설정. 프로토콜 버전에 new Guid("띄어쓰기 불가") 설정이 있습니다.


OnGUI에서 현재 상태를 보여주고 있습니다.


GameClient.cs


도구 > GUID 만들기


다음으로 유니티 StudyNetwork 솔루션에 C++ 서버 프로젝트를 생성하고 라이브러리 설정을 Debug, Release로 합니다.

http://guide.nettention.com/tutorial_ko#66760aeaf35109cf


서버용 클래스를 하나 만듭니다. 여기에서 요점은 CNetServer 클래스를 사용하는 것과 INetServerEvent를 상속받아서 순수 가상함수들을 구현해 주는 것입니다. 

CNetServer::Create()로 객체를 생성하며 서버 파라메터 설정 후 Start()를 해야 서버가 동작합니다.

나머지는 주석처리 해놓았습니다.

코드를 읽다보면 유저가 접속했을 때 printf문으로 문자열 출력 처리를 해주고 있습니다.


ServerStudy.h


ServerStudy.cpp



서버를 실행하고 유니티에서 Connect버튼을 누르면 클라이언트가 서버에 접속하는 것을 볼 수 있습니다.


여기까지 하면 동영상 2번이 끝납니다.


PIDL


다음 3번째 영상에서 PIDL을 만듭니다.

Visual Studio에서 새 파일 > txt를 만들고 확장자를 pidl로 만들면 됩니다.

아래에서 메시지 번호를 3000번대 4000번대를 사용하겠다고 선언해 주는데 PIDL을 작성하면서 문법에 맞지 않으면(3000 누락) 나중에 PIDL 컴파일시 no viable alternative at input { 에러를 냅니다.



그 다음 만들어진 pidl 파일을 빌드해주기 위해서 파일 우클릭 > 속성으로 갑니다.

항목 형식을 사용자 지정 빌드 도구로 합니다.


pidl 파일 빌드 별로 어렵지 않습니다.


pidl.exe 파일은 Social.pidl 파일을 .h .cpp나 .cs파일로 변환해주는 유틸리티 파일입니다.


1. 명령줄 : 프라우드넷이 설치된 F:\Program Files (x86)\Nettention\ProudNet\util\pidl.exe 에 절대경로로 접근할 수 없습니다. 띄어쓰기된 폴더명 때문입니다. 그래서 pidl.exe파일 하나만 그냥 복사해와서 사용합니다.

%(Fullpath)는 Social.pidl 파일의 경로이고 -cs를 입력해서 -outdir을 지정하면 C#파일들로 만들어집니다.

2. 설명 : Compiling ~~

3. 출력 : 나오는 파일 경로와 이름입니다.

4. 추가 종속성에 pidl.exe 파일의 경로를 입력해 줍니다.



프로젝트를 빌드해 주면 컴파일이 됩니다.


빌드를 하면 명령줄에서 작성했듯 2가지 파일들 즉, 서버쪽 C++파일과 클라이언트(유니티)쪽 C#파일들이 생성됩니다.

빌드시 자동으로 생성되는 파일들이기 때문에 수정할 필요가 없습니다.



여기에서 Proxy와 Stub의 개념이 도움말에 보면 나옵니다.


여기서 우리는 몇 가지 용어를 이해해야 합니다. 앞서 IDL 파일을 컴파일하면 생성되는 파일들이 있다고 언급했는데, 그 파일 중 함수 호출을 메시지로 바꾸어 네트웍으로 보내는 모듈을 proxy라고 부르며 네트웍을 통해 받은 메시지를 분석해서 유저 함수를 호출하는 모듈을 stub이라고 부릅니다. 


서버에 접속이 되었으면 위에서 만들어 놓은 함수를 사용하여 RequestLogon을 보냅니다. 

그리고 수정되는 부분은 Proxy, Stub 객체를 생성하고 NetClient에 붙이는(Attach) 것입니다.


수정되는 사항

GameClient.cs



클라이언트에서 RequestLogon을 보냈으니 서버에서 이 메시지를 받아서 처리 한다음 응답해야 합니다.


유심히 봐야할 것은

C2S 클라에서 서버로 보낸 메시지는 Stub이고

S2C 서버에서 클라로 보낼 메시지는 Proxy입니다.

그리고 DECRMI와 DEFRMI의 미묘한 함수명 차이가 있습니다.


그리고 PIDL로 생성된 파일들을 프로젝트에 추가하고 그 파일들을 모두 빌드에서 제외 시켜줍니다.


ServerStudy.h 에 추가된 내용은 다음과 같습니다.

1. #include에서 PIDL로 생성된 Social_common.h, Social_proxy.h, Social_stub.h를 포함.

2. 클라이언트에서 받은 메시지를 처리, SocialC2S::Stub의 함수를 구현하기 위해 상속받음.

3. 서버에서 보내주는 메시지를 처리, SocialS2C::Proxy m_S2CProxy; 선언

4. DECRMI_SocialC2S_RequestLogon 선언


ServerStudy.cpp 에 추가된 내용은 다음과 같습니다.

1. DEFRMI_SocialC2S_RequestLogon 구현, 응답시 처리해줘야 하는 내용은 아직 없네요.

2. 생성자에서 AttachProxy, AttachStub


그리고 빌드를 해주기 위해 헤더 파일 없이 PidlInclude.cpp 파일 하나를 만들어 줍니다.


ServerStudy.h


ServerStudy.cpp


PidlInclude.cpp



여기까지 해서 클라에서 로그온 요청을 보내면 서버에서 응답해 줍니다.

그럼 서버에서 응답해주면 클라에서 처리를 해야 합니다.

응답시 State를 바꿔서 InVille로 들어가게끔 처리해 줍니다.


다음은 ReplyLogon함수 구현과 OnGUI함수를 정리한 정도 입니다.


GameClient.cs



다음은 서버를 켜고(실행) 클라이언트 유니티에서 접속한 후 화면입니다.
여기까지 하면 튜토리얼 동영상의 3장이 끝납니다.



반응형