/// <summary> /// 读取Packet。 /// </summary> private void ReadPacket() { var serializer = new PacketSerializer(); var type = typeof(Packet); while (Running) { try { if (_msgQueue == null) { return; } if (_tcpClient.Available > 0) { var stream = _tcpClient.GetStream(); var packet = serializer.DeserializeWithLengthPrefix(stream, null, type, PrefixStyle.Fixed32BigEndian, 0) as Packet; var msg = MessageDecoder.Decode(packet, _parent.Server); if (msg != null && _msgQueue != null) { _msgQueue.EnqueueReadMessage(msg); } } else { Thread.Sleep(DataCheckInterval); } } catch (ObjectDisposedException e) { // 客户端已经被销毁了,需要断开连接。 if (_parent != null) { _parent.Close(); } } catch (IOException e) { // 通信发生错误,需要断开连接。 if (_parent != null) { _parent.Close(); } } catch (ThreadInterruptedException e) { } catch (Exception e) { } } }