private void Initalize(GiopTransportMessageHandler transportHandler, uint requestId, AsyncResponseAvailableCallBack callback, IClientChannelSinkStack clientSinkStack, GiopClientConnection connection, MessageTimeout timeOutMillis) { m_alreadyNotified = false; m_transportHandler = transportHandler; m_requestId = requestId; m_callback = callback; m_clientConnection = connection; m_clientSinkStack = clientSinkStack; m_timeOut = timeOutMillis; }
internal void SendRequestMessageAsync(Stream requestStream, uint requestId, AsyncResponseAvailableCallBack callback, IClientChannelSinkStack clientSinkStack, GiopClientConnection connection) { // interested in a response -> register to receive response. // this must be done before sending the message, because otherwise, // it would be possible, that a response arrives before being registered IResponseWaiter waiter; lock (m_waitingForResponse.SyncRoot) { // create and register wait handle waiter = new AsynchronousResponseWaiter(this, requestId, callback, clientSinkStack, connection, m_timeout); if (!m_waitingForResponse.Contains(requestId)) { m_waitingForResponse[requestId] = waiter; } else { throw new omg.org.CORBA.INTERNAL(40, CompletionStatus.Completed_No); } } SendMessage(requestStream); connection.NotifyRequestSentCompleted(); // wait for completion or timeout waiter.StartWaiting(); // notify the waiter, that the time for the request starts; is non-blocking }
internal AsynchronousResponseWaiter(GiopTransportMessageHandler transportHandler, uint requestId, AsyncResponseAvailableCallBack callback, IClientChannelSinkStack clientSinkStack, GiopClientConnection connection, MessageTimeout timeOut) { Initalize(transportHandler, requestId, callback, clientSinkStack, connection, timeOut); }