コード例 #1
0
        private void OnIOCompleted(object sender, SocketAsyncEventArgs asyncEventArgs)
        {
            AsyncUserToken userToken = asyncEventArgs.UserToken as AsyncUserToken;

            userToken.ActiveDateTime = DateTime.Now;
            try
            {
                lock (userToken)
                {
                    switch (asyncEventArgs.LastOperation)
                    {
                    //case SocketAsyncOperation.Accept:
                    //    break;
                    //case SocketAsyncOperation.Connect:
                    //    break;
                    //case SocketAsyncOperation.Disconnect:
                    //    break;
                    //case SocketAsyncOperation.None:
                    //    break;
                    case SocketAsyncOperation.Receive:
                        ProcessReceive(asyncEventArgs);
                        break;

                    //case SocketAsyncOperation.ReceiveFrom:
                    //    break;
                    //case SocketAsyncOperation.ReceiveMessageFrom:
                    //    break;
                    case SocketAsyncOperation.Send:
                        ProcessSend(asyncEventArgs);
                        break;

                    //case SocketAsyncOperation.SendPackets:
                    //    break;
                    //case SocketAsyncOperation.SendTo:
                    //    break;
                    default:
                        throw new ArgumentException("the last operation completed on the socket was not a receive or send type");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("IO_Completed {0} error,message:{1}", userToken.ConnectSocket, e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }
コード例 #2
0
        private bool ProcessSend(SocketAsyncEventArgs sendEventArgs)
        {
            AsyncUserToken userToken = sendEventArgs.UserToken as AsyncUserToken;

            if (sendEventArgs.SocketError == SocketError.Success)
            {
                if (_userToken.ConnectSocket == null)
                {
                    Console.WriteLine("ProcessSend userToken. socket is null");
                    return(false);
                }
                else
                {
                    _userToken.ActiveDateTime = DateTime.Now;
                    return(SendCompleted());
                }
            }
            else
            {
                CloseSocket();
                return(false);
            }
        }
コード例 #3
0
 public void Init()
 {
     _userToken = new AsyncUserToken(_receiveBufferSize);
     _userToken.ReceiveEventArgs.Completed += new EventHandler <SocketAsyncEventArgs>(OnIOCompleted);
     _userToken.SendEventArgs.Completed    += new EventHandler <SocketAsyncEventArgs>(OnIOCompleted);
 }