GServer é uma biblioteca de rede UDP confiável, projetada para jogos. Suas principais vantagens são:
O UDP confiável (RUDP) é um protocolo da camada de transporte projetado para situações em que o TCP adiciona muita sobrecarga, mas mesmo assim precisamos de entrega de pacotes com ordem garantida.
RUDP suporta 3 mods e suas combinações. GServer implementa alguns dos mais úteis:
Host é a classe principal do GServer . Ele fornece métodos para receber, enviar e processar mensagens. As mensagens são aceitas automaticamente no tópico de escuta.
As mensagens são enviadas através do método "Send" e processadas com manipuladores, que são registrados pelo usuário através do método "AddHandler". Veja exemplos.
As mensagens são usadas para enviar dados de um host para outro. Possui 3 parâmetros:
DataStorage é usado para serializar dados em uma matriz de bytes. Possui 2 mods:
No modo somente leitura , você pode usar apenas métodos Read que leem dados do buffer. No modo somente gravação , você pode usar apenas métodos Write que gravam dados no buffer.
Em processo...
servidor
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
cliente
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 ) ;
}
}