Example #1
0
        // 添加内部消息
        private void AddInternalPacket(string msg, Socket sk)
        {
            // 通知丢失连接
            NetPacket p = new NetPacket();

            p.socket = sk;
            p.BeginWrite(msg);
            networkMgr.AddPacket(p);
        }
Example #2
0
        // 向Network Manager的队列传递内部消息
        void PushPacket(ushort msgid, string exception)
        {
            NetPacket packet = new NetPacket();

            packet.SetIDOnly(msgid);
            packet._error = exception;
            packet._peer  = _socket;

            _netMgr.AddPacket(packet);
        }
Example #3
0
        // 接收体消息
        void ReceiveBody(System.IAsyncResult ar)
        {
            NetPacket packet = (NetPacket)ar.AsyncState;

            try
            {
                // 返回网络上接收的数据长度
                int read = packet.socket.EndReceive(ar);
                // 已断开连接
                if (read < 1)
                {
                    // 通知丢失连接
                    WriteMsg("OnLost", packet.socket);
                    return;
                }
                packet.readLength += read;

                // 消息体必须读满指定的长度
                if (packet.readLength < packet.bodyLenght)
                {
                    packet.socket.BeginReceive(packet.bytes,
                                               NetPacket.headerLength + packet.readLength,
                                               packet.bodyLenght - packet.readLength,
                                               SocketFlags.None,
                                               new System.AsyncCallback(ReceiveBody),
                                               packet);
                }
                else
                {
                    // 将消息传入到逻辑处理队列
                    NetPacket newpacket = new NetPacket(packet);
                    networkMgr.AddPacket(newpacket);

                    // 下一个读取
                    packet.Reset();
                    packet.socket.BeginReceive(packet.bytes,
                                               0,
                                               NetPacket.headerLength,
                                               SocketFlags.None,
                                               new System.AsyncCallback(ReceiveHeader),
                                               packet);
                }
            }
            catch (System.Exception ex)
            {
                Console.WriteLine("ReceiveBody:" + ex.Message);
            }
        }