Esempio n. 1
0
            private void WritePacket()
            {
                var serializer = new PacketSerializer();
                var type       = typeof(Packet);

                while (Running)
                {
                    try
                    {
                        if (_msgQueue == null)
                        {
                            return;
                        }

                        var msg = _msgQueue.DequeueWriteMessage();
                        if (msg != null)
                        {
                            var packet = MessageEncoder.Encode(msg);
                            if (packet != null)
                            {
                                var stream = _tcpClient.GetStream();
                                serializer.SerializeWithLengthPrefix(stream, packet, type, PrefixStyle.Fixed32BigEndian,
                                                                     0);
                                stream.Flush();
                            }
                        }
                        else
                        {
                            Thread.Sleep(DataCheckInterval);
                        }
                    }
                    catch (ObjectDisposedException e)
                    {
                        // 客户端已经被销毁了,需要断开连接。
                        if (_parent != null)
                        {
                            _parent.Close();
                        }
                    }
                    catch (IOException e)
                    {
                        // 通信发生错误,需要断开连接。
                        if (_parent != null)
                        {
                            _parent.Close();
                        }
                    }
                    catch (Exception e)
                    {
                        // TODO 出错了。
                    }
                }
            }