diff options
Diffstat (limited to 'TAO/tao/Synch_Reply_Dispatcher.h')
-rw-r--r-- | TAO/tao/Synch_Reply_Dispatcher.h | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/TAO/tao/Synch_Reply_Dispatcher.h b/TAO/tao/Synch_Reply_Dispatcher.h index 536096b2041..571948a9dbb 100644 --- a/TAO/tao/Synch_Reply_Dispatcher.h +++ b/TAO/tao/Synch_Reply_Dispatcher.h @@ -20,13 +20,13 @@ #include "ace/pre.h" #include "tao/Reply_Dispatcher.h" -#include "tao/LF_Event.h" #include "tao/GIOP_Message_Version.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ +class TAO_Wait_Strategy; class TAO_Pluggable_Reply_Params; /** @@ -35,9 +35,7 @@ class TAO_Pluggable_Reply_Params; * @brief Reply dispatcher for Synchoronous Method Invocation (SMI)s. * */ -class TAO_Export TAO_Synch_Reply_Dispatcher - : public TAO_Reply_Dispatcher - , public TAO_LF_Event +class TAO_Export TAO_Synch_Reply_Dispatcher : public TAO_Reply_Dispatcher { public: @@ -51,8 +49,16 @@ public: /// Return the reply CDR. TAO_InputCDR &reply_cdr (void); + /// A flag to check if the reply + int &reply_received (void); + virtual int dispatch_reply (TAO_Pluggable_Reply_Params ¶ms); + // Commented for the time being - Bala + // virtual TAO_GIOP_Message_State *message_state (void); + + virtual void dispatcher_bound (TAO_Transport *); + virtual void connection_closed (void); protected: @@ -60,26 +66,34 @@ protected: IOP::ServiceContextList &reply_service_info_; private: - /// Cache the ORB Core pointer. - TAO_ORB_Core *orb_core_; + // TAO_GIOP_Message_State message_state_; + // All the state required to receive the input... + // @@ Having members of type TAO_GIOP* indicates that we + // (Reply_despatcher) are aware of the underlying messaging + // protocol. But for the present let us close our eyes till we are + // able to iterate on a use case - Bala. - /* @@todo: At some point of time we are going to get to a situation - where TAO has huge stack sizes. Need to think on how we would - deal with that. One idea would be to push these things on TSS as - this is created by the thread on a per invocation basis. Post 1.2 - would be a nice time for that I guess - */ + /// Flag that indicates the reply has been received. + int reply_received_; - /// The buffer that is used to initialise the data block - char buf_[ACE_CDR::DEFAULT_BUFSIZE]; + /// Cache the ORB Core pointer. + TAO_ORB_Core *orb_core_; - /// datablock that is created on teh stack to initialise the CDR - /// stream underneath. - ACE_Data_Block db_; + /// Save the wait strategy to signal the waiting threads (if + /// appropriate). + TAO_Wait_Strategy *wait_strategy_; /// CDR stream which has the reply information that needs to be /// demarshalled by the stubs TAO_InputCDR reply_cdr_; + + /** + * The condition variable used to signal the waiting thread in the + * Leader/Followers model. The variable is acquired in the thread + * that binds the Reply_Dispatcher to its transport, and then passed + * to the Waiting_Strategy to do the signalling, if needed. + */ + TAO_SYNCH_CONDITION *leader_follower_condition_variable_; }; #include "ace/post.h" |