///
 /// 引发发送前事件
 ///
 /// 数据
 protected virtual void OnBeforeSendPacketServerEvent(BeforeSendPacketEventArgs e)
 {
     if (BeforeSendPacketServerEvent != null)
     {
         BeforeSendPacketServerEvent(this, e);
     }
 }
        ///
        /// 发送一个流数据
        ///
        public bool Send(ClientContext client, byte[] txBytes, int offset, int count)
        {
            try
            {
                //lock (client)
                {
                    if (client == null)
                    {
                        return(false);
                    }
                    if (client.ClientSocket == null)
                    {
                        return(false);
                    }
                    client.txBytes = new byte[count];
                    Array.Copy(txBytes, offset, client.txBytes, 0, count); //复制数据
                    BeforeSendPacketEventArgs beforeSendPacketEventArgs = new BeforeSendPacketEventArgs(client, client.txBytes);
                    OnBeforeSendPacketServerEvent(beforeSendPacketEventArgs);
                    if (beforeSendPacketEventArgs.isCancel)
                    {
                        return(false);
                    }

                    client.SendEventArgs.SetBuffer(client.txBytes, 0, count);
                    bool willRaiseEvent = client.ClientSocket.SendAsync(client.SendEventArgs);
                    if (!willRaiseEvent)
                    {
                        return(ProcessSend(client.SendEventArgs));
                    }
                    else
                    {
                        return(true);
                    }
                }
            }
            catch (Exception e)
            {
                //Exception ex = new Exception("send:" + e.Message, e);
                OnErrorServerEvent(new ErrorServerEventArgs(e, client, TCPErrorType.Unkown, "send:"));
                //LastException = e;
            }
            return(false);
        }