summaryrefslogtreecommitdiff
path: root/TAO/tao/Exclusive_TMS.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Exclusive_TMS.h')
-rw-r--r--TAO/tao/Exclusive_TMS.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/TAO/tao/Exclusive_TMS.h b/TAO/tao/Exclusive_TMS.h
new file mode 100644
index 00000000000..82932adcfc2
--- /dev/null
+++ b/TAO/tao/Exclusive_TMS.h
@@ -0,0 +1,97 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Exclusive_TMS.h
+ *
+ * $Id$
+ *
+ * @author Alexander Babu Arulanthu <alex@cs.wustl.edu>
+ */
+//=============================================================================
+
+
+#ifndef TAO_EXCLUSIVE_TMS_H
+#define TAO_EXCLUSIVE_TMS_H
+
+#include /**/ "ace/pre.h"
+
+#include "tao/Transport_Mux_Strategy.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_Pluggable_Reply_Params;
+
+/**
+ * @class TAO_Exclusive_TMS
+ *
+ * Using this strategy only one request can be pending at a time
+ * in a connection. This improves performance because the client
+ * does not have to demux the reply, and there is less need for
+ * synchronization.
+ * On the other hand, it does not scale well when you have
+ * multiple client threads or asynchronous messaging.
+ */
+class TAO_Export TAO_Exclusive_TMS : public TAO_Transport_Mux_Strategy
+{
+
+public:
+ /// Constructor.
+ TAO_Exclusive_TMS (TAO_Transport *transport);
+
+ /// Destructor.
+ virtual ~TAO_Exclusive_TMS (void);
+
+ /**
+ * @name The TAO_Transport_Mux_Strategy overrided methods
+ *
+ * Please read the documentation in the TAO_Transport_Mux_Strategy class
+ * for details.
+ */
+ //@{
+ virtual CORBA::ULong request_id (void);
+ virtual int bind_dispatcher (CORBA::ULong request_id,
+ TAO_Reply_Dispatcher *rh);
+ virtual int unbind_dispatcher (CORBA::ULong request_id);
+
+ virtual int dispatch_reply (TAO_Pluggable_Reply_Params &params);
+
+ virtual bool idle_after_send (void);
+ virtual bool idle_after_reply (void);
+ virtual void connection_closed (void);
+ //@}
+
+protected:
+ /// Used to generate a different request_id on each call to
+ /// request_id().
+ CORBA::ULong request_id_generator_;
+
+ /// If false then the request id and reply dispatcher below are
+ /// meaningless
+ bool has_request_;
+
+ /// Request id for the current request.
+ CORBA::ULong request_id_;
+
+ /// Reply Dispatcher corresponding to the request.
+ TAO_Reply_Dispatcher *rd_;
+
+ // @@ Commented for the time being, let the commented line stay for
+ // sometime - Bala
+ // TAO_GIOP_Message_State message_state_;
+ // Message state to read the incoming message.
+
+ // @@ Having members of type TAO_GIOP* indicates that we
+ // (Transport_Mux_Strategy) 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.
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+#endif /* EXCLUSIVE_TMS_H */