summaryrefslogtreecommitdiff
path: root/TAO/tao/Synch_Queued_Message.h
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/tao/Synch_Queued_Message.h')
-rw-r--r--TAO/tao/Synch_Queued_Message.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/TAO/tao/Synch_Queued_Message.h b/TAO/tao/Synch_Queued_Message.h
new file mode 100644
index 00000000000..2a8c638abf7
--- /dev/null
+++ b/TAO/tao/Synch_Queued_Message.h
@@ -0,0 +1,86 @@
+// -*- C++ -*-
+
+//=============================================================================
+/**
+ * @file Synch_Queued_Message.h
+ *
+ * $Id$
+ *
+ * @author Carlos O'Ryan <coryan@uci.edu>
+ */
+//=============================================================================
+
+#ifndef TAO_SYNCH_QUEUED_MESSAGE_H
+#define TAO_SYNCH_QUEUED_MESSAGE_H
+#include "ace/pre.h"
+
+#include "Queued_Message.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+/**
+ * @class TAO_Synch_Queued_Message
+ *
+ * @brief Specialize TAO_Queued_Message for synchronous requests,
+ * i.e. twoways and oneways sent with reliability better than
+ * SYNC_NONE.
+ *
+ * Reliable requests block the sending thread until the message is
+ * sent, likewise, the sending thread must be informed if the
+ * connection is closed or the message times out.
+ *
+ * In contrast oneway (and AMI) requests sent with the SYNC_NONE
+ * policy are simple discarded if the connection fails or they
+ * timeout.
+ *
+ * Another important difference is the management of the data buffer:
+ * one SYNC_NONE messages the buffer is immediately copied into a
+ * newly allocated buffer, and must be deallocated. Other types of
+ * requests use the memory allocated by the sending thread.
+ *
+ */
+class TAO_Export TAO_Synch_Queued_Message : public TAO_Queued_Message
+{
+public:
+ /// Constructor
+ /**
+ * @param contents The message block chain that must be sent.
+ */
+ TAO_Synch_Queued_Message (const ACE_Message_Block *contents);
+
+ /// Destructor
+ virtual ~TAO_Synch_Queued_Message (void);
+
+ const ACE_Message_Block *current_block (void) const;
+
+ /** Implement the Template Methods from TAO_Queued_Message
+ */
+ //@{
+ virtual size_t message_length (void) const;
+ virtual int all_data_sent (void) const;
+ virtual void fill_iov (int iovcnt_max, int &iovcnt, iovec iov[]) const;
+ virtual void bytes_transferred (size_t &byte_count);
+ virtual void destroy (void);
+ //@}
+
+private:
+ /// The contents of the message.
+ /**
+ * The message is normally generated by a TAO_OutputCDR stream. The
+ * application marshals the payload, possibly generating a chain of
+ * message block connected via the 'cont()' field.
+ */
+ ACE_Message_Block *contents_;
+
+ /// The current message block
+ /**
+ * The message may be set in multiple writev() operations. This
+ * point keeps track of the next message to send out.
+ */
+ ACE_Message_Block *current_block_;
+};
+
+#include "ace/post.h"
+#endif /* TAO_QUEUED_MESSAGE_H */