From 3aff90f4a822fcf5d902bbfbcc9fa931d6191a8c Mon Sep 17 00:00:00 2001 From: "William R. Otte" Date: Mon, 24 Jul 2006 15:50:21 +0000 Subject: Repo restructuring --- TAO/tao/Asynch_Queued_Message.h | 105 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 TAO/tao/Asynch_Queued_Message.h (limited to 'TAO/tao/Asynch_Queued_Message.h') diff --git a/TAO/tao/Asynch_Queued_Message.h b/TAO/tao/Asynch_Queued_Message.h new file mode 100644 index 00000000000..045f3dcd4fd --- /dev/null +++ b/TAO/tao/Asynch_Queued_Message.h @@ -0,0 +1,105 @@ +// -*- C++ -*- + +//============================================================================= +/** + * @file Asynch_Queued_Message.h + * + * $Id$ + * + * @author Carlos O'Ryan + */ +//============================================================================= + +#ifndef TAO_ASYNCH_QUEUED_MESSAGE_H +#define TAO_ASYNCH_QUEUED_MESSAGE_H + +#include /**/ "ace/pre.h" + +#include "tao/Queued_Message.h" + +#if !defined (ACE_LACKS_PRAGMA_ONCE) +# pragma once +#endif /* ACE_LACKS_PRAGMA_ONCE */ + +TAO_BEGIN_VERSIONED_NAMESPACE_DECL + +/** + * @class TAO_Asynch_Queued_Message + * + * @brief Specialize TAO_Queued_Message for asynch requests, + * i.e. oneways sent with SYNC_NONE policy. + * + */ +class TAO_Export TAO_Asynch_Queued_Message : public TAO_Queued_Message +{ +public: + /// Constructor + /** + * @param contents The message block chain that must be sent. + * + * @param alloc Allocator used for creating @c this object. + * + * @todo I'm almost sure this class will require a callback + * interface for AMIs sent with SYNC_NONE policy. Those guys + * need to hear when the connection timeouts or closes, but + * cannot block waiting for the message to be delivered. + */ + TAO_Asynch_Queued_Message (const ACE_Message_Block *contents, + TAO_ORB_Core *oc, + ACE_Allocator *alloc = 0, + bool is_heap_allocated = false); + + + /// Destructor + virtual ~TAO_Asynch_Queued_Message (void); + + /** + * @name 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); + /// @note No reason to believe why this would be called. But have + /// it here for the sake of uniformity. + virtual TAO_Queued_Message *clone (ACE_Allocator *alloc); + virtual void destroy (void); + //@} + +protected: + /// Constructor + /** + * @param buf The buffer that needs to be sent on the wire. The + * buffer will be owned by this class. The buffer will be + * deleted when the destructor is called and hence the + * buffer should always come off the heap! + * + * @param size The size of the buffer that is being handed + * over. + * + * @param alloc Allocator used for creating object. + */ + TAO_Asynch_Queued_Message (char *buf, + TAO_ORB_Core *oc, + size_t size, + ACE_Allocator *alloc = 0); +private: + /// The number of bytes in the buffer + const size_t size_; + + /// The offset in the buffer + /** + * Data up to @c offset has been sent already, only the + * [offset_,size_) range remains to be sent. + */ + size_t offset_; + + /// The buffer containing the complete message. + char *buffer_; +}; + +TAO_END_VERSIONED_NAMESPACE_DECL + +#include /**/ "ace/post.h" +#endif /* TAO_ASYNCH_QUEUED_MESSAGE_H */ -- cgit v1.2.1