コード例 #1
0
        private void OnSocketOperationCompleted(object sender, SocketAsyncEventArgs e)
        {
            var socket  = sender as Socket;
            var context = e.GetContext();

            if (!this.HandleSocketError(socket, context))
            {
                return;
            }

            switch (context.LastOperation)
            {
            case SocketAsyncOperation.Send:
#if !SILVERLIGHT
            case SocketAsyncOperation.SendTo:
            case SocketAsyncOperation.SendPackets:
#endif
            {
                var requestContext = context as ClientRequestContext;
                Contract.Assert(requestContext != null);
                this.OnSent(requestContext);
                break;
            }

            case SocketAsyncOperation.Receive:
#if !SILVERLIGHT
            case SocketAsyncOperation.ReceiveFrom:
            case SocketAsyncOperation.ReceiveMessageFrom:
#endif
            {
                var responseContext = context as ClientResponseContext;
                Contract.Assert(responseContext != null);
                this.OnReceived(responseContext);
                break;
            }

            default:
            {
                MsgPackRpcClientProtocolsTrace.TraceEvent(
                    MsgPackRpcClientProtocolsTrace.UnexpectedLastOperation,
                    "Unexpected operation. {{ \"Socket\" : 0x{0:X}, \"RemoteEndPoint\" : \"{1}\", \"LocalEndPoint\" : \"{2}\", \"LastOperation\" : \"{3}\" }}",
                    GetHandle(socket),
                    GetRemoteEndPoint(socket, e),
                    GetLocalEndPoint(socket),
                    context.LastOperation
                    );
                break;
            }
            }
        }