GServer هي مكتبة شبكات UDP موثوقة، مصممة للألعاب. مزاياها الرئيسية هي:
إن udp الموثوق (RUDP) هو بروتوكول طبقة نقل مصمم للحالات التي يضيف فيها TCP الكثير من الحمل، ولكننا مع ذلك نحتاج إلى تسليم حزم بأمر مضمون.
يدعم RUDP 3 تعديلات ومجموعاتها. ينفذ GServer بعضًا من أكثرها فائدة:
المضيف هو الفئة الرئيسية في GServer . يوفر طرقًا لتلقي الرسائل وإرسالها ومعالجتها. يتم قبول الرسائل تلقائيًا في موضوع الاستماع.
يتم إرسال الرسائل باستخدام طريقة "إرسال" ومعالجتها باستخدام معالجات يتم تسجيلها من قبل المستخدم باستخدام طريقة "AddHandler". انظر الأمثلة.
تُستخدم الرسائل لإرسال البيانات من مضيف إلى آخر. لديها 3 المعلمات:
يتم استخدام DataStorage لإجراء تسلسل للبيانات في صفيف بايت. لديها 2 تعديل:
في وضع القراءة فقط ، يمكنك استخدام أساليب القراءة فقط والتي تقوم بقراءة البيانات من المخزن المؤقت. في وضع الكتابة فقط ، يمكنك استخدام أساليب الكتابة فقط والتي تقوم بكتابة البيانات في المخزن المؤقت.
قيد المعالجة...
الخادم
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 ) ;
}
}