GServer — это надежная сетевая библиотека UDP, предназначенная для игр. Его основные преимущества:
Надежный udp (RUDP) — это протокол транспортного уровня, разработанный для ситуаций, когда TCP добавляет слишком много накладных расходов, но, тем не менее, нам необходима доставка пакетов в гарантированном порядке.
RUDP поддерживает 3 мода и их комбинации. GServer реализует некоторые из наиболее полезных из них:
Host — это основной класс в GServer . Он предоставляет методы для получения, отправки и обработки сообщений. Сообщения принимаются автоматически в потоке прослушивания.
Сообщения отправляются методом «Отправить» и обрабатываются обработчиками, которые регистрируются пользователем с помощью метода «AddHandler». См. примеры.
Сообщения используются для отправки данных с одного хоста на другой. Он имеет 3 параметра:
DataStorage используется для сериализации данных в массив байтов. Имеет 2 мода:
В режиме только для чтения вы можете использовать только методы Read, которые читают данные из буфера. В режиме только записи вы можете использовать только методы Write, которые записывают данные в буфер.
В процессе...
сервер
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 ) ;
}
}