private void ClientThreadWork()
{
var messages = new List<NetIncomingMessage>();
while (_state != ChannelStateType.Closed)
{
var readed = _client.ReadMessages(messages);
if (readed < 1)
{
Thread.Sleep(10);
continue;
}
foreach (var msg in messages)
{
switch (msg.MessageType)
{
case NetIncomingMessageType.StatusChanged:
var status = (NetConnectionStatus)msg.ReadByte();
var reason = msg.ReadString();
if (status == NetConnectionStatus.Connected)
{
OnConnect();
}
else if (status == NetConnectionStatus.Disconnected)
{
OnClose(reason);
}
break;
case NetIncomingMessageType.Data:
var workStream = new MemoryStream(msg.ReadBytes(msg.LengthBytes), 0, msg.LengthBytes, false, true);
var packet = _packetSerializer.Deserialize(workStream);
OnReceive(packet);
break;
}
}
// recycle messages to avoid garbage
_client.Recycle(messages);
messages.Clear();
}
}
}