GServer
1.0.0
GServer は、ゲーム用に設計された信頼性の高い UDP ネットワーク ライブラリです。その主な利点は次のとおりです。
Reliable udp (RUDP) は、TCP によって過剰なオーバーヘッドが追加される状況向けに設計されたトランスポート層プロトコルですが、それでも順序が保証されたパケット配信が必要です。
RUDP は 3 つの MOD とその組み合わせをサポートしています。 GServer は、その中で最も有用なもののいくつかを実装しています。
Host はGServerのメインクラスです。メッセージを受信、送信、処理するメソッドを提供します。メッセージはリッスン スレッドで自動的に受け入れられます。
メッセージは「Send」メソッドを使用して送信され、ユーザーが「AddHandler」メソッドを使用して登録したハンドラーで処理されます。例を参照してください。
メッセージは、あるホストから別のホストにデータを送信するために使用されます。 3 つのパラメータがあります。
DataStorage は、データをバイト配列にシリアル化するために使用されます。 2つのMODがあります:
読み取り専用モードでは、バッファからデータを読み取る 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 ) ;
}
}