GServer เป็นไลบรารีเครือข่าย UDP ที่เชื่อถือได้ ออกแบบมาสำหรับเกม ข้อดีหลักคือ:
UDP ที่เชื่อถือได้ (RUDP) เป็นโปรโตคอลชั้นการขนส่งที่ออกแบบมาสำหรับสถานการณ์ที่ TCP เพิ่มโอเวอร์เฮดมากเกินไป แต่ถึงกระนั้นเราก็ยังต้องการการส่งมอบแพ็กเก็ตที่รับประกันการสั่งซื้อ
RUDP รองรับ 3 mods และการรวมกัน GServer ใช้งานบางส่วนที่มีประโยชน์ที่สุด:
Host เป็นคลาสหลักใน GServer มีวิธีการรับ ส่ง และประมวลผลข้อความ ข้อความได้รับการยอมรับโดยอัตโนมัติในเธรดการฟัง
ข้อความจะถูกส่งโดยใช้วิธี "ส่ง" และประมวลผลด้วยตัวจัดการ ซึ่งผู้ใช้ลงทะเบียนไว้โดยใช้วิธี "AddHandler" ดูตัวอย่าง
ข้อความใช้เพื่อส่งข้อมูลจากโฮสต์หนึ่งไปยังอีกโฮสต์หนึ่ง มี 3 พารามิเตอร์:
DataStorage ใช้เพื่อทำให้ข้อมูลเป็นอนุกรมลงในอาร์เรย์ไบต์ มันมี 2 mod:
ในโหมด อ่านอย่างเดียว คุณสามารถใช้เพียงวิธีการอ่านซึ่งกำลังอ่านข้อมูลจากบัฟเฟอร์ ในโหมด เขียนอย่างเดียว คุณสามารถใช้เพียงวิธีการเขียนซึ่งกำลังเขียนข้อมูลลงในบัฟเฟอร์
อยู่ระหว่างดำเนินการ...
เซิร์ฟเวอร์
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 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 ) ;
}
}