GServer es una biblioteca de red UDP confiable, diseñada para juegos. Sus principales ventajas son:
Udp confiable (RUDP) es un protocolo de capa de transporte diseñado para situaciones en las que TCP agrega demasiada sobrecarga, pero aun así necesitamos una entrega de paquetes en orden garantizado.
RUDP admite 3 modificaciones y sus combinaciones. GServer implementa algunos de los más útiles:
Host es la clase principal de GServer . Proporciona métodos para recibir, enviar y procesar mensajes. Los mensajes se aceptan automáticamente en el hilo de escucha.
Los mensajes se envían mediante el método "Enviar" y se procesan con controladores, que el usuario registra mediante el método "AddHandler". Ver ejemplos.
Los mensajes se utilizan para enviar datos de un host a otro. Tiene 3 parámetros:
DataStorage se utiliza para serializar datos en una matriz de bytes. Tiene 2 mods:
En el modo de solo lectura , puede usar solo métodos de lectura que leen datos del búfer. En el modo de solo escritura , puede usar solo métodos de escritura que escriben datos en el búfer.
En proceso...
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 ) ;
}
}