Ejemplo n.º 1
0
        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
        }
Ejemplo n.º 2
0
 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
 }