GServer est une bibliothèque réseau UDP fiable, conçue pour les jeux. Ses principaux avantages sont :
Reliable udp (RUDP) est un protocole de couche transport conçu pour les situations où TCP ajoute trop de surcharge, mais nous avons néanmoins besoin d'une livraison de paquets dans un ordre garanti.
RUDP prend en charge 3 mods et leurs combinaisons. GServer implémente certains des plus utiles d'entre eux :
Host est la classe principale de GServer . Il fournit des méthodes pour recevoir, envoyer et traiter des messages. Les messages sont acceptés automatiquement dans le fil d'écoute.
Les messages sont envoyés à l'aide de la méthode "Send" et traités avec des gestionnaires enregistrés par l'utilisateur à l'aide de la méthode "AddHandler". Voir des exemples.
Les messages sont utilisés pour envoyer des données d'un hôte à un autre. Il comporte 3 paramètres :
DataStorage est utilisé pour sérialiser les données dans un tableau d'octets. Il dispose de 2 mods :
En mode lecture seule , vous pouvez utiliser uniquement les méthodes Read qui lisent les données du tampon. En mode écriture seule , vous pouvez utiliser uniquement les méthodes Write qui écrivent les données dans le tampon.
En cours...
serveur
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
client
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 ) ;
}
}