Exemplo n.º 1
0
 private void TryDequeueAndPostSend(TcpConnect tcpConn)
 {
     byte[] data;
     if (tcpConn.TryDequeue(out data))
     {
         AsyncUserToken dataToken = (AsyncUserToken)tcpConn.SendEventArgs.UserToken;
         dataToken.messageBytes  = data;
         dataToken.messageLength = data.Length;
         if (TestLag)
         {
             dataToken.SendTime = System.DateTime.Now.Ticks; // IDllImportAPI.HighPrecision_GetTickCount();
         }
         try
         {
             PostSend(tcpConn.SendEventArgs);
         }
         catch (System.Exception ex)
         {
             Log.Log.Net.Info(ex.ToString());
             Log.Log.Net.Info(ex.StackTrace.ToString());
             //发送发生了异常,那么这个连接都关闭算了。
             HandleCloseSocket(tcpConn.ReceiveEventArgs);
         }
     }
     else
     {
         tcpConn.ResetSendFlag();
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Posts the send.
        /// </summary>
        public void PostSend(TcpConnect tcpConn, byte[] data, int offset, int count)
        {
            int P = NetPacketParser.PREFIX_SIZE;

            byte[] buffer = new byte[count + P];
            Buffer.BlockCopy(BitConverter.GetBytes((UInt16)count), 0, buffer, 0, P);
            Buffer.BlockCopy(data, offset, buffer, P, count);
            tcpConn.Enqueue(buffer);
            if (tcpConn.TrySetSendFlag())
            {
                try
                {
                    AsyncUserToken dataToken = (AsyncUserToken)tcpConn.SendEventArgs.UserToken;
                    dataToken.Reset(true);

                    TryDequeueAndPostSend(tcpConn);
                }
                catch
                {
                    tcpConn.ResetSendFlag();
                    throw;
                }
            }
        }