Exemple #1
0
        public bool SendAsync(byte[] bytes)
        {
            SendBuffer.StartPacket();
            // 写入包头
            SendBuffer.Buffer.WriteInt16(Packet.HEAD);
            // 写入包长
            SendBuffer.Buffer.WriteInt32(bytes.Length);
            // 写入数据
            SendBuffer.Buffer.WriteBytes(bytes, 0, bytes.Length);
            SendBuffer.EndPacket();
            bool result = true;

            if (!mSendAsync)
            {
                int count  = 0;
                int offset = 0;
                if (SendBuffer.GetFirstPacket(ref offset, ref count))
                {
                    mSendAsync = true;
                    SendEventArgs.SetBuffer(SendBuffer.Buffer.Bytes, offset, count);
                    result = AsyncNet.SendAsync(this);
                }
            }
            return(result);
        }
Exemple #2
0
 public void add(AsyncNet net)
 {
     lock (queue)
     {
         queue.Add(net);
         Monitor.Pulse(queue);
     }
 }
Exemple #3
0
        public bool RecvAsync()
        {
            // 写入数据内容
            int lastPos = RecvBuffer.Position;

            RecvBuffer.WriteBytes(RecvEventArgs.Buffer, RecvEventArgs.Offset, RecvEventArgs.BytesTransferred);
            RecvBuffer.Clear(RecvBuffer.Position - lastPos); // Position位置回退
            BytesTransferred = BytesTransferred + RecvEventArgs.BytesTransferred;

            bool result = true;

            while (BytesTransferred >= sizeof(short))
            {
                // 包头检查
                short head = RecvBuffer.ReadInt16();
                if (head != Packet.HEAD)
                {
                    App.Logger.Error("包头错误, 关闭远程连接!");
                    return(false);
                }
                BytesTransferred = BytesTransferred - sizeof(short);

                // 包长
                int length = RecvBuffer.ReadInt32();
                if ((length > 1024 * 1024) | (RecvBuffer.Position > BufferSize))
                {
                    // 最大缓存保护
                    App.Logger.Error("字节流溢出,即将关闭远程连接!");
                    return(false);
                }
                BytesTransferred = BytesTransferred - sizeof(int);

                lastPos = RecvBuffer.Position;
                Packet.Serialization(RecvBuffer, false);
                RecvBuffer.Clear(RecvBuffer.Position - lastPos);

                Packet oPacket = PacketFactory.CreatePacket(Packet.PacketID);
                if (oPacket != null)
                {
                    lastPos = RecvBuffer.Position;
                    oPacket.Serialization(RecvBuffer, false);
                    int oDataLength = RecvBuffer.Position - lastPos;
                    BytesTransferred = BytesTransferred - oDataLength;
                    // 接收包
                    oPacket.state = this;
                    AsyncNet.Recive(oPacket);
                }
                else
                {
                    App.Logger.Error("协议解析出错, 即将关闭远程连接");
                    return(false);
                }
            }
            return(result);
        }
Exemple #4
0
        public bool SendAsyncCompleted()
        {
            ActiveDateTime = DateTime.UtcNow;
            mSendAsync     = false;
            SendBuffer.ClearFirstPacket(); //清除已发送的包
            int offset = 0;
            int count  = 0;

            if (SendBuffer.GetFirstPacket(ref offset, ref count))
            {
                mSendAsync = true;
                // 设置发送的数据包
                SendEventArgs.SetBuffer(SendBuffer.Buffer.Bytes, offset, count);
                return(AsyncNet.SendAsync(this));
            }
            else
            {
                return(true);
            }
        }
Exemple #5
0
 public void add(AsyncNet net)
 {
     lock(worker.queue)
     {
         worker.queue.Add(net);
         Monitor.Pulse(worker.queue);
     }
 }
Exemple #6
0
 public void add(AsyncNet net)
 {
     lock(queue)
     {
         queue.Add(net);
         Monitor.Pulse(queue);
     }
 }