private void _onDatagramReceived(IPEndPoint ep, byte[] buffer, int length)
{
int offset = 0;
BvlcHeader header = null;
IBvlcMessage message = null;
NetgramReceivedMessage netgram = null;
Mac mac = IPUtils.IPEndPointToMac(ep);
try
{
if (length < 4)
throw new Exception("Received datagram under 4 bytes long");
header = new BvlcHeader();
offset = header.Deserialize(buffer, offset);
if (header.Length != length)
throw new Exception("Received bvlc datagram with non-matching lengths");
message = _createMessage(header.Function);
offset = message.Deserialize(buffer, offset);
lock (_lock)
{
netgram = _processMessage(mac, message, buffer, offset, length);
}
if (netgram != null && Session != null)
Session.QueueMessage(netgram);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
}