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; } } }