GServer ist eine zuverlässige UDP-Netzwerkbibliothek, die für Spiele entwickelt wurde. Seine Hauptvorteile sind:
Reliable udp (RUDP) ist ein Transportschichtprotokoll, das für Situationen entwickelt wurde, in denen TCP zu viel Overhead verursacht, wir aber dennoch eine Paketzustellung in garantierter Reihenfolge benötigen.
RUDP unterstützt 3 Mods und deren Kombinationen. GServer implementiert einige der nützlichsten davon:
Host ist die Hauptklasse in GServer . Es bietet Methoden zum Empfangen, Senden und Verarbeiten von Nachrichten. Nachrichten werden automatisch im Listen-Thread akzeptiert.
Nachrichten werden mit der Methode „Send“ gesendet und mit Handlern verarbeitet, die vom Benutzer mit der Methode „AddHandler“ registriert werden. Siehe Beispiele.
Nachrichten werden verwendet, um Daten von einem Host an einen anderen zu senden. Es hat 3 Parameter:
DataStorage wird verwendet, um Daten in ein Byte-Array zu serialisieren. Es gibt 2 Mods:
Im schreibgeschützten Modus können Sie nur Lesemethoden verwenden, die Daten aus dem Puffer lesen. Im Nur-Schreib -Modus können Sie nur Schreibmethoden verwenden, die Daten in den Puffer schreiben.
In Bearbeitung ...
Server
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
Kunde
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 ) ;
}
}