넷드론 익스프레스 사용 안내서 목차 1. 제품 구성...2 2. 플랫폼 구성...2 2.1. VirtualBox 설치...2 2.2. CentOS 설치...3 3. 빌드 준비...4 3.1. 개발 도구...4 3.2. 유니티 클라이언트...5 3.3. 게임 서버...6 3.4. 환경 설정...7 4. 지원 프로그램...8 4.1. 필수 도구...8 4.2. 응용 도구...9 5. 사용 방법...10 5.1. 패키지 소개...10 5.2. 게임 오브젝트...11 5.3. 오토 프레임워크...12 5.4. 로그 및 메세지...13 5.5. 유니티 엔진 분리...13 1
1. 제품 구성 구분 분류1 분류2 Engine NetDroneUnity SDK Tools Express.NET Template 비고 크로스 플렛폼 전체 소스 DataConverter CSV to Binary CSV 변환 도구 DummyClient RTCP, RUDP 테스트 도구 ReuseMemory 가상 메모리 풀 테스트 도구 CryptTester RSA RC5/RC6 테스트 도구 NetCommon Client/Server 공유 소스 UnityClient.NET/C# 예제 클라이언트 GameServer.NET/C# 예제 서버 2. 플랫폼 구성 2.1. VirtualBox 설치 Oracle VirtualBox는 윈도우즈 환경에서 손쉽게 리눅스 환경을 테스트 할 수 있는 가상 환경을 제공하 는 소프트웨어 입니다. 만약 당신이 VMware, Hyper-V 사용에 익숙하다면 해당 소프트웨어를 사용하셔 도 괜찮습니다. Oracle VirtualBox 다운로드 https://www.virtualbox.org 게임 서버 예제는 Windows, Linux, OSX 에서 모두 안정적인 성능을 보여주며, 본 문서는 Linux 를 기준으로 작성 됩니다. 2
2.2. CentOS 설치 리눅스 배포판중 하나인 CentOS는 업스트림 소스인 레드햇 엔터프라이즈 리눅스와 완벽히 호환되는 무료 기업용 플랫폼 입니다. 만약 당신이 Utuntu, Gentoo 사용에 익숙하다면 해당 배포판을 사용하셔 도 괜찮습니다. CentOS (The Community ENTerprise Operating System) 다운로드 https://www.centos.org 게임 서버 예제는 Windows, Linux, OSX 에서 모두 원할히 작동하지만 본 문서에서는 CentOS 6 를 기준으로만 안내 합니다. CentOS 설치는 되도록 서버 용으로 기본 패키지 들만 설치하세요. 최신 패키지 업데이트 root # yum -y update 필수 패키지 설치 root # yum -y install policycoreutils-python gcc gdb cmake mono mono-devel rpmbuild unzip 3
3. 빌드 준비 3.1. 개발 도구 게임 서버 예제는 MonoDevelop으로 개발이 가능합니다. 최신 버전을 다운로드 받아 설치 하시기 바랍니다. 다운로드 http://www.monodevelop.com 게임 서버 예제는 Visual Studio로 개발이 가능합니다. 최신 버전을 다운로드 받아 설치 하시기 바랍니다. 다운로드 https://imagine.microsoft.com/ko-kr/catalog/product/101 Windows 환경에서 각각의 IDE를 설치 한 뒤 VirtualBox/CentOS를 서버로 두고 개발 하는 것이 가능합니다. 4
3.2. 유니티 클라이언트 NetDrone Express Scene 순서와 동일한 Enum 값을 선언하고 있어 순서가 매우 중요합니다. 빌드 후 클라이언트 여러개를 실행하여 테스트 할 수 있습니다. 5
3.3. 게임 서버 Visual Studio 빌드 gameserver.sln 을 열어 빌드하면 실행 파일이 생성됩니다. Command Line 빌드 (xbuild) root #./make.sh root #./make.sh Debug root #./make.sh Release root #./make.sh Debug /opt/local install Command Line 실행 (windows) C:\> gameserver.exe C:\> gameserver.exe -s 100 -c gameserver-windows.txt -s : server id -c : config path Command Line 실행 (linux) root # mono --debug./gameserver.exe -s 100 -c./gameserver-linux.txt root # mono --debug./gameserver.exe -s 100 -c./gameserver-linux.txt 1> /tmp/output.txt 2>&1 -s : server id -c : config path root # cat /tmp/output.txt root # tail -f /tmp/output.txt 6
3.4. 환경 설정 NDCF는 기본적으로 하나 또는 각각의 파일에서 여러개의 프로세스에 대한 설정 옵션을 프로세스 이름 과 서버 아이디를 통해서 구분합니다. [process_name_1:server_id_100]... [process_name_1:server_id_101]... [process_name_2:server_id_100]... [process_name_2:server_id_101]... # 마크를 사용한 주석 입력을 사용하는 것이 가능하며 Defines.h에 새로운 Key를 추가하여 CfgMgr 함 수에서 읽어오는 것이 가능합니다. DefaultInterface 외부에서 연결이 들어오는 인터페이스 이름을 입 력합니다. eth0 DefaultPort 외부에서 연결이 들어오는 사용할 Tcp Port를 입 력합니다. 11000 BackboneInterface 서버간 통신이 필요할 경우 전용망 인터페이스 이름을 입력합니다. eth0/eth1 BackbonePort 서버간 통신이 필요할 경우 서버 전용 Tcp Port 를 입력합니다. 11001 MaxConnection HeaderCrypt 최대 동시 접속 제한을 설정합니다. 0~65535 패킷 헤더 암호화 true/false LogPath Enums.h에 정의되어 있는 LOG_EVENT_TYPE과 LOG_FIELD_TYPE 포멧의 서비스 로그가 저장되는 위치입니다. InfoPath kill 명령어를 통한 클린 종료 또는 프로세스 상태 확인을 할수있도록 프로세스 아이디 정보를 기록 PGID, PPID, PID 하는 위치입니다. 7
4. 지원 프로그램 4.1. 필수 도구 넷드론 엔진의 유니티 패키지에는 csv 파일을 bytes 포멧으로 일괄 변경하는 데이터 변환 도구 가 포함되어 있습니다. Assets/../Tools 경로 아래에 DataConverter.zip 파 일을 복사하여 풀어주세요. 위치: Tools/DataConverter.zip DataConverter Dataconverter/temp/ 아래에 테스트용 csv 파일이 들어있습니다. DataConverter.exe를 실행할 경우 지정된 위치의 모든 CSV 파일들은 Bytes 포멧으로 변경 됩니 다. 생성된 Bytes 파일들은 Assets/NetDrone Express/Client/Resources/Binary 아래에 복사하세요. 오토 프레임워크의 CDBM은 CSV, Bytes 포멧을 모두 지원합니다. CSV 구분자는 콤마만 사용해야 하며 첫줄에는 열 이름이 반드시 필요합니다. TCP와 Reliable UDP 테스트가 가능한 클라이언트 입니다. Assets/../Tools 경로 아래에 DummyClient.zip 파 일을 복사하여 풀어주세요. 위치: Tools/DummyClient.zip DummyClient 원격 명령어 실행 도구로 사용 할 수 있습니다. 부하 측정 도구로 사용 할 수 있습니다. 8
4.2. 응용 도구 링크드 리스트로 구현한 재사용 가능 메모리 구조 테스터 입니다. Assets/../Tools 경로 아래에 ReuseMemory.zip 파 일을 복사하여 풀어주세요. 위치: Tools/ReuseMemory.zip ReuseMemory Linked List를 기반으로 한 메모리 재사용 구조를 보여줍니다. 반복 횟수 등을 입력하여 테스트 합니다. 아이템 같이 메모리 할당 및 해제가 자주 일어나는 곳에 사용하세요. 자체 구현(RC5, RC6 기반)한 암호화 기능을 테스 트 할수 있는 도구입니다. Assets/../Tools 경로 아래에 CryptTester.zip 파일 을 복사하여 풀어주세요. 위치: Tools/CryptTester.zip CryptTester 넷드론 엔진이 제공하는 RC5/RC6의 암호화 및 복호화 결과를 보여줍니다. 문자열과 패킷 테스트가 가능합니다. 9
5. 사용 방법 5.1. 패키지 소개 구분 분류 비고 Animation Audio Resources Config Material Prefabs Texture Scenes 예제용 씬 Audio Camera Net Scripts 프로토콜 패킷 처리 기능 State 클라이언트 상태 처리 기능 UI Unit 플레이어 유닛 처리와 관리 기능 Util Config 처리 기능 World 채널/룸 처리 기능 NetDroneUnity SDK NetCommon Client/Server 공유 소스 Plugins Standard Assets Server gameserver Tools DataConverter, DummyClient, ReuseMemory, CryptTester 다운로드 받은 후 패키지를 구성하는 폴더 구조입니다. 10
5.2. 게임 오브젝트 구분 분류1 분류2 비고 UI Channels User List Room List Main Room Packet 및 List 정보 출력 Networks Queue (Native:Count) Engine Connector (Main:TCP) Connector (Sub:TCP) Main Player Main State (STATE) Audios Scene Music Audio Sfx Audio 유니티 에디터로 실행할 경우 DontDestroyOnLoad 영역에 나타납니다. 예제에 포함된 기능들을 테스트 하면서 Hierarchy에 어떻게 표시되는지 살펴보세요. 11
5.3. 오토 프레임워크 AutoFramework란 C#에서 C++ 처럼 전역적 클래스/함수 작성을 지원할수 있도록 고안된 partial class 집합입니다. UnityEngine 네임스페이스에 포함되어있는 GameFramework는 using UnityEngine을 선언 할 경우 별다른 추가 선언이 필요없습니다. GameFramework를 사용하는 작성 방법은 다음과 같습니다. MonoBehaviour를 사용하는 기존 클래스 대체 방법 Defines.cs를 참고하시면 GameFramework는 AutoFramework 및 MonoBehaviour 상속이 되어있습니 다. 유니티 에티터용 스크립트 작성시 MonoBehaviour 대신 GameFramework를 상속하세요. public class Example : GameFramework {... 이제 partial class GameFramework로 묶여있는 모든 클래스/함수들은 네임스페이스 접근없이 전역적 접근이 가능합니다. 전역적 접근 구조에 포함시키고 싶은 일반 클래스 작성 방법 넷드론 유니티 소스 코드와 클라이언트 예제는 모두 partial class GameFramework 안에 존재합니다. 새로운 클래스 및 전역함수 작성을 하시려면 아래 예제들 처럼 작성하세요. namespace UnityEngine { public partial class GameFramework { public class CExample { public CExample() { ~CExample() { namespace UnityEngine { public partial class GameFramework { public static CExample g_kexample { get { return CExample.GetInstance(); public class CExample : CSingleton<CExample> { public CExample() { ~CExample() { public void Test() { 이제 partical class GameFramework에 포함되어 있거나 public class Example : GameFramework 처럼 상속되는 모든 곳에서 g_kexample.test()만 입력하면 네임스페이스 접근없이 호출됩니다. 12
5.4. 로그 및 메세지 넷드론 엔진의 유니티 버전은 TRACE, OUTPUT, PRINT, ERROR 함수를 정의하여 표준 출력 내용을 표시 합니다. TRACE DISABLE_UNITY 선언이 있을경우 Console.WriteLine(FILE, LINE, FUNCTION) 함수와 연 결, 선언이 없을경우 UnityEngine.Debug.Log 함수와 연결됩니다. OUTPUT DISABLE_UNITY 선언이 있을경우 Console.WriteLine(FILE, LINE, FUNCTION) 함수와 연 결, 선언이 없을경우 UnityEngine.Debug.Log 함수와 연결됩니다. PRINT DISABLE_UNITY 선언이 있을경우 Console.WriteLine 함수와 연결, 선언이 없을경우 UnityEngine.Debug.Log 함수와 연결됩니다. ERROR DISABLE_UNITY 선언이 있을경우 System.Diagnostics.Debug.WriteLine 함수와 연결, 선언이 없을경우 UnityEngine.Debug.LogError 함수와 연결됩니다. TRACE 명령어를 사용하려면 Assets 폴더 아래 gmcs.rsp/smcs.rsp (-define:debug) 파일을 생성 하세요. DEBUG 선언을 제거할 경우 TRACE 코드는 모두 사라집니다. 5.5. 유니티 엔진 분리 넷드론 유니티는 유니티 엔진 뿐만 아니라 C#으로 구현하는 모든 프로젝트에 적용하는 것이 가능합니 다. 독립적으로 사용하려면 DISABLE_UNITY 선언을 추가하세요. MonoDevelop 선언 위치 Project Options: Build > Compiler > Define Symbols gameserver 프로젝트를 참고하세요. 13