Esempio n. 1
0
 /// <summary>
 /// 发送报文
 /// </summary>
 /// <param name="value"></param>
 public void Write(byte[] value)
 {
     //如果socket为null,就
     if (this.conn == null)
     {
         //自己把自己赋值进关闭进程
         this.closeProcess(this, "调用已经断开的连接");
     }
     else
     {
         if (value == null && DebugMessage.Notice != null)
         {
             DebugMessage.Notice((object)"编码出待发送的值为null");
         }
         //加入到发送队列中
         this.writeQueue.Add(value);
         //如果正在写,就返回
         if (this.isWriting)
         {
             return;
         }
         this.isWriting = true;
         //调用写
         this.OnWrite();
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 处理接收
        /// </summary>
        /// <param name="e"></param>
        public void ProcessReceive(SocketAsyncEventArgs e)
        {
            //从socket中提取用户模型
            UserToken userToken = e.UserToken as UserToken;

            //输入接受到的字节输大于零,并且socket标识为接收成功
            if (userToken.receiveSAEA.BytesTransferred > 0 && userToken.receiveSAEA.SocketError == SocketError.Success)
            {
                //提取传输出来的字节数组
                byte[] buff = new byte[userToken.receiveSAEA.BytesTransferred];
                //copy缓冲区到新建的字节数组
                Buffer.BlockCopy((Array)userToken.receiveSAEA.Buffer, 0, (Array)buff, 0, userToken.receiveSAEA.BytesTransferred);
                //把数组置入用户模型中
                userToken.Receive(buff);
                this.StartReceive(userToken);
            }
            //客户端断开连接处理
            else if ((uint)userToken.receiveSAEA.SocketError > 0U)
            {
                if (DebugMessage.Notice != null)
                {
                    DebugMessage.Notice((object)("网络消息接收异常:用户退出+" + e.SocketError.ToString()));
                }
                this.ClientClose(userToken, userToken.receiveSAEA.SocketError.ToString());
            }
            else
            {
                this.ClientClose(userToken, "客户端主动断开连接");
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 处理发送,赋值到UserToken
        /// </summary>
        /// <param name="e"></param>
        public void ProcessSend(SocketAsyncEventArgs e)
        {
            UserToken userToken = e.UserToken as UserToken;

            //客户端断开连接
            if ((uint)e.SocketError > 0U)
            {
                if (DebugMessage.Notice != null)
                {
                    DebugMessage.Notice((object)("网络消息发送异常:用户退出+" + e.SocketError.ToString()));
                }
                this.ClientClose(userToken, e.SocketError.ToString());
            }
            else
            {
                userToken.Writed();
            }
        }
Esempio n. 4
0
 /// <summary>
 /// 正在发送的数据包
 /// </summary>
 public void OnWrite()
 {
     try
     {
         lock (this.sendSAEA)
         {
             if (this.writeQueue.Count == 0)
             {
                 //取消正在写标识
                 this.isWriting = false;
             }
             else
             {
                 //取出队列中最前面的消息
                 byte[] write = this.writeQueue[0];
                 this.writeQueue.RemoveAt(0);
                 //如果write队列是空
                 if (write == null)
                 {
                     if (DebugMessage.Notice != null)
                     {
                         DebugMessage.Notice((object)"解析出待发送的值为null");
                     }
                     this.isWriting = false;
                     //递归
                     this.OnWrite();
                 }
                 else
                 {
                     //设置数据缓冲
                     this.sendSAEA.SetBuffer(write, 0, write.Length);
                     //发送异步,先发送拆出来的一部分出去
                     bool flag = this.conn.SendAsync(this.sendSAEA);
                     //如果处于挂起状态直接返回
                     if (flag)
                     {
                         return;
                     }
                     //不处于挂起就发送进程
                     this.sendProcess(this.sendSAEA);
                     Console.Write("是否挂起:" + flag.ToString());
                 }
             }
         }
     }
     catch (InvalidOperationException ex)
     {
         if (DebugMessage.Error == null)
         {
             return;
         }
         DebugMessage.Error((object)ex.Message);
     }
     catch (Exception ex)
     {
         if (DebugMessage.Error == null)
         {
             return;
         }
         DebugMessage.Error((object)ex.Message);
     }
 }