/// <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) { ; } }
/// <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); } } }