예제 #1
0
        private void ResumeReceive()
        {
            var socketArgs = SocketArgsPool.GetSocketArgs();

            manager.SetBuffer(socketArgs);
            socketArgs.UserToken   = this.TcpSocket;
            socketArgs.Completed  += this.ProcessReceived;
            socketArgs.SocketFlags = SocketFlags.None;

            this.TcpSocket.ReceiveAsync(socketArgs);
        }
예제 #2
0
        //private void ReceiveAsyncComplete(object sender, SocketAsyncEventArgs args)
        //{
        //    this.ProcessReceive(args);
        //}

        public virtual void Send(byte[] packet, int offset, int length)
        {
            if (this.TcpSocket != null && this.TcpSocket.Connected)
            {
                var args = SocketArgsPool.GetSocketArgs();
                if (args != null)
                {
                    args.Completed += SendAsyncComplete;
                    args.SetBuffer(packet, offset, length);
                    args.UserToken   = this.TcpSocket;
                    args.SocketFlags = SocketFlags.None;
                    this.TcpSocket.SendAsync(args);

                    unchecked
                    {
                        this.BytesSent += (uint)length;
                    }
                }
                else
                {
                    // TODO: Log an error
                }
            }
        }
예제 #3
0
 private void SendAsyncComplete(object sender, SocketAsyncEventArgs args)
 {
     args.Completed -= this.SendAsyncComplete;
     SocketArgsPool.ReleaseSocketArgs(args);
 }