GServer adalah perpustakaan jaringan UDP yang andal, dirancang untuk game. Keuntungan utamanya adalah:
Udp yang andal (RUDP) adalah protokol lapisan transport yang dirancang untuk situasi di mana TCP menambahkan terlalu banyak overhead, namun tetap saja kita memerlukan pengiriman paket dengan pesanan yang terjamin.
RUDP mendukung 3 mod dan kombinasinya. GServer mengimplementasikan beberapa yang paling berguna:
Host adalah kelas utama di GServer . Ini menyediakan metode untuk menerima, mengirim dan memproses pesan. Pesan diterima secara otomatis di thread mendengarkan.
Pesan dikirim menggunakan metode "Kirim" dan diproses dengan penangan, yang didaftarkan oleh pengguna menggunakan metode "AddHandler". Lihat contoh.
Pesan digunakan untuk mengirim data dari satu host ke host lainnya. Ini memiliki 3 parameter:
DataStorage digunakan untuk membuat serial data ke dalam array byte. Ini memiliki 2 mod:
Dalam mode baca saja Anda bisa menggunakan metode Baca saja yang membaca data dari buffer. Dalam mode tulis saja , Anda hanya dapat menggunakan metode Tulis yang menulis data ke dalam buffer.
Sedang dalam proses...
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
klien
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 ) ;
}
}