C#으로 게임 클라이언트 및 서버를 개발할 수 있도록 도와주는 라이브러리로 기타 다른 C# 어플리케이션에서도 사용 가능합니다. 다음 프로젝트에서 사용하였으며 사용 예시를 확인할 수 있습니다.
Unity Client Framework, C# Game Server Framework
통신 및 세션 관련
통신을 담당하는 클래스로 특정 서버에 연결하거나 데이터를 전송, 수신하는 역할을 수행합니다.
생성자는 다음과 같이 클라이언트용과 서버용으로 나누어져 있습니다.
// 클라이언트에서 생성할 때
NetworkManager networkManager = new NetworkManager(serializer);
// 서버에서 생성할 때
NetworkManager networkManager = new NetworkManager(socket, serializer);
이때 생성자 인자로 ISerializer 인터페이스를 상속받아 구현된 클래스를 전달해주어야 합니다. 서버측에는 서버 Listener가 Accept한 소켓도 함께 인자로 전달합니다.
클라이언트에서 서버에 접속할 때에는 Connect() 함수를 호출합니다. 또한 연결을 해제하기 위해 Disconnect() 함수를 사용합니다.
/// IP:127.0.0.1, PORT:9000 인 서버에 접속
networkManager.Connect(127.0.0.1, 9000);
/// 연결 해제
networkManager.Disconnect();
전송 및 수신은 다음과 같이 실행할 수 있습니다.
/// 전송
networkManager.Send(data);
/// 수신
byte[] buffer = networkManager.Receive();
Send 함수의 인자로는 모든 클래스가 전달될 수 있습니다.
통신을 위해 필요한 프로토콜을 정의합니다. DataBundle, Header, IDto는 더이상 사용되지 않습니다.
통신을 위해 직렬화 및 역직렬화를 구현할 인터페이스입니다.
byte[] Serialize<T>(T data);
T Deserialize<T>(byte[] bytes);
기타 유틸입니다. JsonManager는 더이상 사용되지 않습니다.
배열을 string으로 변환합니다.
string을 enum으로 변환합니다.
콘솔 출력을 위한 유틸입니다. 유니티와 콘솔 앱에서 모두 사용할 수 있습니다.
다른 프로세스를 실행시켜주기 위한 유틸입니다. 현재 개발중입니다.
cmd창에서 dir 명령어(window)를 수행할 때 다음과 같이 사용합니다.
// dir 명령어 실행 결과를 result에 저장
string result = ProcessManager.SyncCmd("dir");
// dir 실행 결과 출력
Print.Log(result);