오픈소스를 활용한 C# 서버 만들기

16
1 SyncZone – Server Development Community Ver.1.0.0 ‘ 오오오오오 오오오’ C# 오오 오오오 SyncZone Issue Date : 2015-05- 15

Transcript of 오픈소스를 활용한 C# 서버 만들기

Ver.1.0.0

‘ 오픈소스를 활용한’

C# 서버 만들기SyncZone

Issue Date : 2015-05-15

2SyncZone – Server Development Community

시작하기에 앞서… ^^;

SyncZone 에서는 ‘ Aegis’ 라는 무료 네트워크 모듈을 활용하여

C# 으로 보다 가벼운 접근으로 나에게 최적화된 서버를 구축할 수 있도록

다양한 개발정보와 Prototype 소스 등을 함께 나누고자 합니다 .

Aegis 네트워크 모듈은 ‘㈜엔티스피어’에서 개발하여 무료로 공개하고 있습니다 .

Aegis 네트워크 모듈은 Git Hub 를 통해 배포하고 있으며 ,

서버용 네트워크 모듈은 물론 클라이언트 (C#, Unity3D) 용 모듈까지 함께 제공하고

있습니다 .

Aegis 모듈은 아래 주소에서 다운로드 받으실 수 있습니다 .

https://github.com/SyncZone/Aegis

3SyncZone – Server Development Community

C# 프로젝트 생성 하기01 단계

4SyncZone – Server Development Community

1. Project 만들기

1. File>New>Project 메뉴 선택하세요

2. 프로젝트는 Visual C# 의 Windows Form Application 입니다 .

3. Name 에 프로젝트명을 입력하세요 .

5SyncZone – Server Development Community

2. Dll 복사하기

1. Aegis.Core.dll 과 Aegis.Network.dll 을 프로젝트의 폴더로 복사하세요 .

2. 사실 , 이 두 가지 dll 은 다른 폴더에 위치해도 상관없습니다 .( 설명의 편의를 위해 프로젝트 폴더에 복사했습니다 .)

6SyncZone – Server Development Community

3. Reference 추가

1. EchoServer 프로젝트에서 References를 Right Click 하여 Add Reference 를 선택합니다 .

2. Dialog 에서 왼쪽의 Browse 를 선택하고 오른쪽 아래의 Browse… 버튼을 누릅니다 .

7SyncZone – Server Development Community

3. Reference 추가

1. Aegis.Core.dll 과 Aegis.Network.dll 두 파일을 선택 후 Add 버튼을 누르세요 .

2. 그리고 OK 를 누르면 네트워크 모듈이 프로젝트에 추가됩니다 .

8SyncZone – Server Development Community

4. Configuration 설정

Aegis 는 64bit 환경에서만 구동이 가능합니다 . 그래서 프로젝트의 설정도 64bit 로 변경해야 하죠 .

1. Build > Configuration Manager 메뉴를 선택하거나 ToolBar 에서 Configuration Manager 를 선택하세요 .

2. 다이얼로그에서 보여지듯 , 프로젝트는 기본값으로 Any CPU 로 설정되어있습니다 .

9SyncZone – Server Development Community

4. Configuration 설정

1. Active solution platform 에서 New 를 선택하면 플랫폼 선택 다이얼로그가 보여집니다 .

2. 기본으로 x64 가 선택되어 있을거예요 . OK 를 누르면 64bit 설정이 생성 / 추가됩니다 .

3. Platform 을 x64 로 변경하고 Close 를 누르세요

10SyncZone – Server Development Community

여기까지 끝냈으면 ?

‘Aegis 네트워크 모듈’을 사용하는C# 64bit 프로젝트를 생성한 것이죠 ! ^^;

이제 네트워크 구성으로 넘어 갑니다 .

11SyncZone – Server Development Community

네트워크 구성 하기02 단계

12SyncZone – Server Development Community

1. 닥치고 ! 구동 시켜보기 !

Aegis 을 사용하기 위해 모듈을 초기화합니다 .Starter.Initialize 함수 한 줄로 초기화가 되죠 !

클라이언트와 통신을 하기 위한 네트워크 채널을 구성해야 합니다 .NetworkChannel 을 생성하고 통신을 담당할 class 를 지정해주죠 .

클라이언트가 서버에 접속할 수 있도록 IP Address 와 Port 를 지정해 개방합니다 .클라이언트는 여기서 지정된 주소로 접속하고 , NetworkChannel 에서 네트워킹을 처리합니다 .

[ 개요 ]

3. Listener Open

2. NetworkChannel 생성

1. Aegis 초기화

말이 많았네요 ! ^^; 다음 페이지를 보고 그냥 한번 동작 시켜 봅시다 .

13SyncZone – Server Development Community

3. Listener Open

[ 예제 ]

public void StartServer(){

Starter.Initialize();

NetworkChannel network = NetworkChannel.CreateChannel("NetworkClient", 2);network.CreateAcceptorSession<ClientSession>(10, 2048, 2048);

network.Start();network.OpenListener("127.0.0.1", 10100);

}

2. NetworkChannel 생성

1. Aegis 초기화

앞서 설명한 과정은 이렇게 다섯 줄이면 끝납니다 .이제부터 이 프로그램은 10100 포트를 사용해 패킷을 주고받을 수 있는 어엿한 서버가 된거죠 ! ^^다왔네요 ! 마지막 단계 ClientSession 만 추가 하면 서버 구동을 확인 하실 수 있습니다 . 짜 ~ 잔 !

1. 닥치고 ! 구동 시켜보기 !

14SyncZone – Server Development Community

1. Project 에서 RightClick > Add > New Item 메뉴를 선택하세요 .2. 다이얼로그에서 Class 를 선택하시고 ClientSession.cs 를 입력하세요 .3. Add 를 누르면 ClientSession 클래스가 추가됩니다 .

마지막으로 패킷을 주고 받기 위한 클래스를 아래와 같이 추가 합니다 ! ^^

1. 닥치고 ! 구동 시켜보기 !

15SyncZone – Server Development Community

[ 예제 ]

2. 테스트 서버 구성해 보기

public class ClientSession : Session { protected override void OnAccept() { using (Packet packet = Packet.NewPacket(0x1000)) { SendPacket(packet); } }

protected override void OnReceive(StreamBuffer stream) { using (Packet reqPacket = new Packet(stream)) { if (reqPacket.PID == 0x2001) { reqPacket.SkipHeader(); // 패킷 해더는 Skip !!

// 패킷에서 데이터 추출하기 Int32 value1 = reqPacket.GetInt32(); Int32 value2 = reqPacket.GetInt32();

// 결과패킷 보내기 using (Packet resPacket = new Packet(0x2002)) { resPacket.PutInt32(value1 + value2); SendPacket(resPacket); } } } }

클라이언트가 접속하면 Hello 패킷을 보냅니다 .Hello 는 Packet 의 ID 가 0x1000 이라고 가정하구요 .

클라이언트로부터 요청 패킷을 받았습니다 .Packet 의 ID 가 0x2001 인 패킷이네요 . 패킷에서 데이터를 이렇게 추출하구요 .

0x2001 요청패킷의 응답 패킷은 0x2002 입니다 .SendPacket 하면 패킷이 클라이언트에 보내져요 .

본격적으로 테스트 서버를 만들어 볼까요 ? ^^서버에서 패킷을 서로 주고 받는 것까지 테스트 할 수 있습니다 .

16SyncZone – Server Development Community

Example – Echo

백문이 불여일견 !설명드릴게 많지만 아무래도 직접 보시는게 더 빠른 이해가 되시겠죠 ~!

그래서 간단한 Echo 예제를 준비했습니다 .클라이언트와 서버가 모두 준비되어있으니 직접 실행해보시길 !!!

궁금하신 점은 Facebook Synczone 그룹에 언제든 문의해 주세요 . ^^ https://www.facebook.com/groups/synczone/

Source Code 는 GIT HUB 에 있어요↓ ↓ ↓

https://github.com/SyncZone/EchoTest