public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream) { IMethodCallMessage mcall = msg as IMethodCallMessage; if (_rd == null) { _rd = _e.ReceiverDispatcher; } int requestId = (int)mcall.LogicalCallContext.GetData("__iceRequestId"); // Register the reply notification /before/ we even send the // request ManualResetEvent mre = null; if (requestId != 0) { mre = _rd.RegisterReplyNotification(requestId); } lock (_e.Stream) { ((MemoryStream)requestStream).WriteTo(_e.Stream); } // oneway invocation, nothing to respond if (requestId == 0) { responseHeaders = null; responseStream = null; return; } // wait for the reply to come in Trace.WriteLine("ClientTransportSink Waiting on requestID " + requestId); mre.WaitOne(); Trace.WriteLine("ClientTransportSink got notification, requestID " + requestId); MemoryStream ms = _rd.GetMessageStream(requestId); responseStream = ms; responseHeaders = new TransportHeaders(); }
private void AsyncSendMessageStream(IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders requestHeaders, Stream requestStream) { IMethodCallMessage mcall = msg as IMethodCallMessage; if (_rd == null) { _rd = _e.ReceiverDispatcher; } int requestId = (int)mcall.LogicalCallContext.GetData("__iceRequestId"); ManualResetEvent mre = null; if (requestId != 0) { mre = _rd.RegisterReplyNotification(requestId); } lock (_e.Stream) { ((MemoryStream)requestStream).WriteTo(_e.Stream); } // oneway invocation, no response if (requestId == 0) { return; } mre.WaitOne(); MemoryStream responseStream = _rd.GetMessageStream(requestId); TransportHeaders responseHeaders = new TransportHeaders(); sinkStack.AsyncProcessResponse(responseHeaders, responseStream); }
public void ProcessMessage (IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream) { IMethodCallMessage mcall = msg as IMethodCallMessage; if (_rd == null) { _rd = _e.ReceiverDispatcher; } int requestId = (int) mcall.LogicalCallContext.GetData("__iceRequestId"); // Register the reply notification /before/ we even send the // request ManualResetEvent mre = null; if (requestId != 0) mre = _rd.RegisterReplyNotification (requestId); lock (_e.Stream) { ((MemoryStream) requestStream).WriteTo (_e.Stream); } // oneway invocation, nothing to respond if (requestId == 0) { responseHeaders = null; responseStream = null; return; } // wait for the reply to come in Trace.WriteLine ("ClientTransportSink Waiting on requestID " + requestId); mre.WaitOne(); Trace.WriteLine ("ClientTransportSink got notification, requestID " + requestId); MemoryStream ms = _rd.GetMessageStream (requestId); responseStream = ms; responseHeaders = new TransportHeaders(); }
private void AsyncSendMessageStream (IClientChannelSinkStack sinkStack, IMessage msg, ITransportHeaders requestHeaders, Stream requestStream) { IMethodCallMessage mcall = msg as IMethodCallMessage; if (_rd == null) { _rd = _e.ReceiverDispatcher; } int requestId = (int) mcall.LogicalCallContext.GetData("__iceRequestId"); ManualResetEvent mre = null; if (requestId != 0) mre = _rd.RegisterReplyNotification (requestId); lock (_e.Stream) { ((MemoryStream) requestStream).WriteTo (_e.Stream); } // oneway invocation, no response if (requestId == 0) { return; } mre.WaitOne(); MemoryStream responseStream = _rd.GetMessageStream (requestId); TransportHeaders responseHeaders = new TransportHeaders(); sinkStack.AsyncProcessResponse (responseHeaders, responseStream); }