Пример #1
0
        /// <summary>添加消息到发送工作队列里
        /// </summary>
        public void PushSendQue(SocketAsyncEventArgs e, byte[] bytes)
        {
            try
            {
                AsynSocketSendUserToken asyncSend = GetSendSocUserToken();


                int revInt = 0;
                try
                {
                    int socketHandle = (e.UserToken as Socket).Handle.ToInt32();
                    asyncSend.ConnectSocketHandle = socketHandle;
                    asyncSend.ReceiveBuffer       = bytes;
                    asyncSend.ReceiveEventArgs    = e;

                    revInt = ((socketHandle % 160) / 4);
                }
                catch (Exception exe)
                {
                    Logger.WriteLog("PushSendQue exp:" + exe.Message);
                }

                _sendWorkList[revInt].EnqueueItem(asyncSend);
            }
            catch (Exception ex)
            {
                ;
            }
        }
Пример #2
0
        /// <summary> 处理发送消息队列
        /// </summary>
        /// <param name="obj"></param>
        private void DoWorkForSendQu(object obj)
        {
            int sendQueIndex = Convert.ToInt32(obj);
            SendWorkQueue <AsynSocketSendUserToken> que = _sendWorkList[sendQueIndex];

            while (true)
            {
                try
                {
                    if (que.GetQueeuCount() > 0)
                    {
                        AsynSocketSendUserToken asyncUserToken = que.DequeueItem();
                        if (asyncUserToken != null)
                        {
                            try
                            {
                                if ((asyncUserToken.ReceiveEventArgs.UserToken as Socket).Handle.ToInt32() == asyncUserToken.ConnectSocketHandle)
                                {
                                    BeginSend(asyncUserToken.ReceiveEventArgs, asyncUserToken.ReceiveBuffer);
                                }
                            }
                            catch (Exception ex)
                            {
                                Logger.WriteLog("DoWorkForSendQu727:" + ex.Message);
                            }
                        }
                    }
                    else
                    {
                        Thread.Sleep(10);
                    }
                }
                catch (Exception ex)
                {
                    Logger.WriteLog("DoWorkForSendQu外面:" + ex.Message);
                }
            }
        }