User has to register Serialize & De-serialize functions of Payloads that defines how payloads get serialized while sending Network Message and get de-serialized while receiving Network Messages. Below is the sample code to register payload.
/// <summary>
/// Operation serialized/deserialized using build-in serializer
/// </summary>
public class PingOperation
{
private const ushort MsgId = (ushort)MessageId.Ping;
// properties
public int pingCount;
public static void Register()
{
FN.RegisterPayload((ushort)MsgId, Serialize, Deserialize);
}
public static object Deserialize(ArraySegment<byte> buffer)
{
var data = BitBufferPool.GetInstance();
data.FromArray(buffer);
var _payload = Acquire(); // release it after use [see PingCountHandler.cs ln 21]
_payload.pingCount = data.ReadInt();
data.Clear();
return _payload;
}
public static ArraySegment<byte> Serialize(object pingOperation)
{
var op = pingOperation as PingOperation;
var data = BitBufferPool.GetInstance();
data.Clear();
data.AddInt(op.pingCount);
return data.ToArray();
}
Register Handler
Handlers are object oriented way to handle incoming network messages.
Create an Handler
public class LoginMessageHandler : IHandler
{
public ushort MsgId => (ushort)MessageId.Login;
public void HandleMessage(Message message, uint PeerId)
{
var sender = FN.PeerCollection.GetPeerByID(PeerId);
PayloadData payload = (message.Payload as PayloadData);
string userName = payload.Data[0] as string;
string password = payload.Data[1] as string;
FN.Logger.Info($"Login Request sent by: {userName}");
var reply = Message.Acquire();
reply.CopyFrom(message);
PayloadData data_payload = new PayloadData()
{
Data = new System.Collections.Generic.Dictionary<byte, object>()
{
{0, true }, // sucessful login
{1, Guid.NewGuid().ToString() } // auth token
}
};
reply.Payload = data_payload;
FN.Server.SendMessage(sender, reply, DeliveryMethod.Reliable, 0);
Message.Release(reply);
}
}
Trigger HandleMessage method of handlers with this syntax in OnNetworkReceive method of ISocketListener of IClientSocket or IServerSocket
public void OnNetworkReceive(Message message, uint sender)
{
bool handled = FN.HandlerCollection.HandleMessage(message, sender);
if (!handled)
{
// no handler is registered against coming msg, mannually handle it here
}
}