示例#1
0
 private bool AppendToOutMessageQueue(QueuedOutMessage msg)
 {
     try
     {
         if (msg == null || msg.Client == null || MsgDeliver == null || MsgDeliver.Length < 1)
         {
             return(false);
         }
         //int idx = msg.Client.nUID % MESSAGE_DELIVER_THREADS;
         int idx = (int)(msg.Client.nUID % this._Config.SendThreads);
         if (idx >= 0 && idx < MsgDeliver.Length && MsgDeliver[idx] != null)
         {
             MsgDeliver[idx].SendAsc(msg);
         }
     }
     catch { }
     return(true);
 }
示例#2
0
        public void SendAsc(QueuedOutMessage msg)
        {
            try
            {
                if (msg == null || msg.Client == null || !msg.Client.Socket.Connected || msg.Command == null)
                {
                    return;
                }

                ClientManager  clmngr  = msg.Client;
                ISocketMessage message = msg.Command;

                byte[] buf = message.GetBytes();
                msg.Length = (uint)buf.Length;
                msg.ShutdownClientAfterSend = true;
                clmngr.Socket.BeginSend(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(SendAscyCallback), msg);
            }
            catch
            {
            }
            finally { }
        }
示例#3
0
 private void StartMessageDeliver(object sender, DoWorkEventArgs e)
 {
     while (true)
     {
         Thread.Sleep(15);
         try
         {
             if (_OutingMessage != null && _OutingMessage.Count > 0)
             {
                 lock (_OutingMessage.SyncRoot)
                 {
                     if (_OutingMessage.Count > 0)
                     {
                         QueuedOutMessage msg = _OutingMessage.Dequeue() as QueuedOutMessage;
                         SendAsc(msg);
                     }
                 }
             }
         }
         catch { }
         finally { }
     }
 }
示例#4
0
        public void SendAscyCallback(IAsyncResult ar)
        {
            QueuedOutMessage msg = null;

            try
            {
                msg = (QueuedOutMessage)ar.AsyncState;
                if (msg == null || msg.Client == null)
                {
                    return;
                }

                uint bytesSent = (uint)msg.Client.Socket.EndSend(ar);
                if (msg.ShutdownClientAfterSend && this.ShutDownClient != null)
                {
                    ShutDownClient(this, new ClientShutDownEventArgs(msg.Client));
                }
                //发送不成功
                if (bytesSent != msg.Length)
                {
                    AppendToOutMessageQueue(msg);
                }
            }
            catch (Exception ex)
            {
                if (msg != null)
                {
                    AppendToOutMessageQueue(msg);
                }
                if (this.ShutDownClient != null)
                {
                    ShutDownClient(this, new ClientShutDownEventArgs(msg.Client));
                }
                Console.WriteLine(string.Format("SendAscyCallback Error:{0}", ex.Message));
            }
        }
示例#5
0
 public bool AppendToOutMessageQueue(QueuedOutMessage msg)
 {
     return(true);
 }