private void ServerThreadWork()
{
// capture _server member to avoid race condition.
var server = _server;
while (_isStopped == false || _channelMap.Count > 0)
{
NetIncomingMessage msg;
while ((msg = server.WaitMessage(100)) != null)
{
switch (msg.MessageType)
{
case NetIncomingMessageType.ConnectionApproval:
_self.Tell(new AcceptMessage(msg));
break;
case NetIncomingMessageType.StatusChanged:
var status = (NetConnectionStatus)msg.ReadByte();
switch (status)
{
case NetConnectionStatus.Disconnected:
IActorRef disconnectedChannel;
if (_channelMap.TryRemove(msg.SenderConnection, out disconnectedChannel))
{
disconnectedChannel.Tell(UdpChannel.DisconnectedMessage.Instance);
}
else
{
_logger.ErrorFormat($"Failed in removing connection in Disconnected.");
}
break;
}
break;
}
server.Recycle(msg);
}
}
}
}