GServer
1.0.0
GServer는 게임용으로 설계된 안정적인 UDP 네트워킹 라이브러리입니다. 주요 장점은 다음과 같습니다.
RUDP( 신뢰할 수 있는 UDP )는 TCP가 너무 많은 오버헤드를 추가하지만 그럼에도 불구하고 보장된 순서의 패킷 전달이 필요한 상황을 위해 설계된 전송 계층 프로토콜입니다.
RUDP는 3가지 모드와 그 조합을 지원합니다. GServer는 그 중 가장 유용한 몇 가지를 구현합니다:
Host는 GServer 의 메인 클래스입니다. 메시지를 수신, 전송 및 처리하는 방법을 제공합니다. 메시지는 청취 스레드에서 자동으로 수락됩니다.
메시지는 "Send" 메소드를 사용하여 전송되고 "AddHandler" 메소드를 사용하여 사용자가 등록한 핸들러로 처리됩니다. 예시를 참조하세요.
메시지는 한 호스트에서 다른 호스트로 데이터를 보내는 데 사용됩니다. 여기에는 3개의 매개변수가 있습니다:
DataStorage는 데이터를 바이트 배열로 직렬화하는 데 사용됩니다. 2가지 모드가 있습니다:
읽기 전용 모드에서는 버퍼에서 데이터를 읽는 Read 메서드만 사용할 수 있습니다. 쓰기 전용 모드에서는 버퍼에 데이터를 쓰는 Write 메서드만 사용할 수 있습니다.
진행 중 ...
섬기는 사람
Host host = new Host ( portNumber ) ; //instantiate host on portNumber port
host . StartListen ( numberOfThreads ) ; //StartListen on numberOfThreads threads
Timer timer = new Timer ( o => host . Tick ( ) ) ;
timer . Change ( 10 , 10 ) ; // enables timer tick every 10 milliseconds
고객
Host host = new Host ( portNumber ) ; //instantiate host on portNumber port
host . StartListen ( numberOfThreads ) ; //StartListen on numberOfThreads threads
Timer timer = new Timer ( o => host . Tick ( ) ) ;
timer . Change ( 10 , 10 ) ; // enables timer tick every 10 milliseconds
host . OnConnect = ( ) => Console . WriteLine ( "Connected" ) ; // connect handler
host . BeginConnect ( serverEndpoint ) ; // connecting to server endpoint
/* host inicialization here */
//add handler to message with id == messageId
//when message with that id will arrive callback will be invoked
//connection - connection associated with sender
host . AddHanlder ( messageId , ( message , connection ) =>
{
/* deserialize message buffer */
/* process message buffer */
/* send response if needed */
} ) ;
class SimpleClass : ISerializable , IDeserializable
{
public int IntField { get ; set ; }
public byte [ ] ByteArray { get ; set } // arraySize = IntField
public byte [ ] Serialize ( )
{
var ds = DataStorage . CreateForWrite ( ) ;
ds . Push ( IntField ) ;
ds . Push ( ByteArray ) ;
return ds . Serialize ( ) ;
}
public void FillDeserialize ( byte [ ] buffer )
{
var ds = DataStorage . CreateForRead ( buffer ) ;
IntField = ds . ReadInt32 ( ) ;
ByteArray = ds . ReadBytes ( IntField ) ;
}
}