summaryrefslogtreecommitdiff
path: root/TAO/tao/Transport_Mux_Strategy.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Transport_Mux_Strategy.h')
-rw-r--r--TAO/tao/Transport_Mux_Strategy.h105
1 files changed, 105 insertions, 0 deletions
diff --git a/TAO/tao/Transport_Mux_Strategy.h b/TAO/tao/Transport_Mux_Strategy.h
new file mode 100644
index 00000000000..bcf8b9bef96
--- /dev/null
+++ b/TAO/tao/Transport_Mux_Strategy.h
@@ -0,0 +1,105 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Transport_Mux_Strategy.h
+ *
+ * $Id$
+ *
+ * @author Alexander Babu Arulanthu <alex@cs.wustl.edu>
+ */
+//=============================================================================
+
+#ifndef TAO_TRANSPORT_MUX_STRATEGY_H
+#define TAO_TRANSPORT_MUX_STRATEGY_H
+
+#include /**/ "ace/pre.h"
+
+#include /**/ "tao/TAO_Export.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+#include "tao/Basic_Types.h"
+
+ACE_BEGIN_VERSIONED_NAMESPACE_DECL
+class ACE_Lock;
+ACE_END_VERSIONED_NAMESPACE_DECL
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+class TAO_Reply_Dispatcher;
+class TAO_Transport;
+class TAO_Pluggable_Reply_Params;
+
+/**
+ * @class TAO_Transport_Mux_Strategy
+ *
+ * @brief Strategy to determine whether the connection should be
+ * multiplexed for multiple requests or it is exclusive for a
+ * single request at a time.
+ *
+ */
+class TAO_Export TAO_Transport_Mux_Strategy
+{
+
+public:
+ /// Base class constructor.
+ TAO_Transport_Mux_Strategy (TAO_Transport *transport);
+
+ /// Base class destructor.
+ virtual ~TAO_Transport_Mux_Strategy (void);
+
+ /// Generate and return an unique request id for the current
+ /// invocation.
+ virtual CORBA::ULong request_id (void) = 0;
+
+ // = Bind and Find methods for the <Request ID, ReplyDispatcher>
+ // pairs.
+
+ /// Bind the dispatcher with the request id. Commonalities in the
+ /// derived class implementations is kept here.
+ virtual int bind_dispatcher (CORBA::ULong request_id,
+ TAO_Reply_Dispatcher *rd) = 0;
+
+ /**
+ * Unbind the dispatcher, the client is no longer waiting for the
+ * request, for example, because the request timedout.
+ * The strategy can (must) cleanup any resources associated with the
+ * request.
+ * A later reply for that request should be ignored.
+ */
+ virtual int unbind_dispatcher (CORBA::ULong request_id) = 0;
+
+ /// Dispatch the reply for <request_id>, cleanup any resources
+ /// allocated for that request.
+ virtual int dispatch_reply (TAO_Pluggable_Reply_Params &params) = 0;
+
+ /// Request has been just sent, but the reply is not received. Idle
+ /// the transport now. The return value indicates whether idling was
+ /// successful or not.
+ virtual bool idle_after_send (void) = 0;
+
+ /// Request is sent and the reply is received. Idle the transport
+ /// now. The return value indicates whether idling was successful or
+ /// not.
+ virtual bool idle_after_reply (void) = 0;
+
+ /// The transport object has closed the connection, inform all Reply
+ /// dispatchers and waiting strategies.
+ virtual void connection_closed (void) = 0;
+
+protected:
+ /// Cache the transport reference.
+ TAO_Transport *transport_;
+
+ /// Lock to protect the state of the object
+ ACE_Lock *lock_;
+};
+
+TAO_END_VERSIONED_NAMESPACE_DECL
+
+#include /**/ "ace/post.h"
+
+#endif /* TRANSPORT_MUX_STRATEGY_H */