private void OnReceive(IAsyncResult ar)
{
lock (this)
{
int length;
try
{
if (_socket == null)
{
return;
}
length = _socket.EndReceive(ar);
}
catch (Exception)
{
return;
}
try
{
var stream = new MemoryStream(_buffer, 0, length, false, true);
Announcement announcement = ReadAnnouncement(stream);
if (announcement.Type == Announcement.MessageType.Announcement)
{
SapClient.OnSessionAnnounce(this, announcement);
}
else
{
announcement.Decompress();
string origin = Encoding.UTF8.GetString(announcement.Payload.Array, announcement.Payload.Offset + 2, announcement.Payload.Count - 4);
SapClient.OnSessionDelete(this, Origin.Parse(origin));
}
}
catch (Exception e)
{
SapClient.OnException(e);
}
StartReceive();
}
}