Esempio n. 1
0
        public async Task SendAsync(byte[] buffer, int offset, int len, Action <int> callback)
        {
            if (secure)
            {
                SecureStream.Encrypt(buffer, offset, len);
            }
            int bytes = -1;

            try
            {
                SocketAsyncEventArgs sockArgs;
                if (!sendQueue.TryDequeue(out sockArgs))
                {
                    sockArgs = new SocketAsyncEventArgs();
                }
                sockArgs.SetBuffer(buffer, offset, len);
                sockArgs.Completed += SockArgsSend_Completed;
                sockArgs.UserToken  = callback;
                if (!socket.SendAsync(sockArgs))
                {
                    SockArgsSend_Completed(socket, sockArgs);
                }
            }
            catch (ObjectDisposedException)
            {
            }
            catch (SocketException ex)
            {
                Console.WriteLine("[WARN] SendAsync | SocketError=" + ex.SocketErrorCode);
            }
        }
Esempio n. 2
0
        private void SockArgsRecv_Completed(object sender, SocketAsyncEventArgs e)
        {
            var callback = e.UserToken as Func <int, Task>;

            e.Completed -= SockArgsRecv_Completed;
            if (e.LastOperation == SocketAsyncOperation.Receive)
            {
                recvQueue.Enqueue(e);
            }

            Console.WriteLine("{0} {1} <=     {2} {3}", "RECV", this.LocalEndPoint.ToString().PadRight(22), this.RemoteEndPoint.ToString().PadRight(22), e.BytesTransferred);
            if (secure && e.BytesTransferred > 0)
            {
                SecureStream.Decrypt(e.Buffer, 0, e.BytesTransferred);
            }
            callback(e.BytesTransferred).Wait();
        }
Esempio n. 3
0
        private void SockArgsSend_Completed(object sender, SocketAsyncEventArgs e)
        {
            var callback = e.UserToken as Action <int>;

            e.Completed -= SockArgsSend_Completed;
            if (e.LastOperation == SocketAsyncOperation.Send)
            {
                sendQueue.Enqueue(e);
            }

            Console.WriteLine("{0} {1} =>     {2} {3}", "SEND", this.LocalEndPoint.ToString().PadRight(22), this.RemoteEndPoint.ToString().PadRight(22), e.BytesTransferred);
            if (secure && e.BytesTransferred > 0)
            {
                SecureStream.Decrypt(e.Buffer, 0, e.BytesTransferred);
            }
            callback(e.BytesTransferred);
        }