00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef SEMAINE_CMS_RECEIVER_RECEIVER_H
00011 #define SEMAINE_CMS_RECEIVER_RECEIVER_H
00012
00013 #include <semaine/config.h>
00014
00015 #include <cms/MessageListener.h>
00016
00017 #include <decaf/util/concurrent/Concurrent.h>
00018 #include <decaf/util/concurrent/Mutex.h>
00019
00020
00021 #include <semaine/cms/IOBase.h>
00022 #include <semaine/cms/CMSLogger.h>
00023 #include <semaine/cms/SEMAINEMessageAvailableListener.h>
00024 #include <semaine/cms/message/SEMAINEMessage.h>
00025
00026 #include <semaine/cms/exceptions/MessageFormatException.h>
00027 #include <semaine/cms/exceptions/SystemConfigurationException.h>
00028
00029 using namespace cms;
00030 using namespace semaine::cms;
00031 using namespace semaine::cms::message;
00032
00033
00034 using namespace decaf;
00035
00036 namespace semaine {
00037 namespace cms {
00038 namespace receiver {
00063 class Receiver : public IOBase, public MessageListener
00064 {
00065 public:
00077 Receiver(const std::string & topicName) throw (CMSException);
00078
00093 Receiver(const std::string & topicName, const std::string & messageSelector) throw (CMSException);
00094
00103 Receiver(const std::string & cmsUrl, const std::string & cmsUser, const std::string & cmsPassword,
00104 const std::string & topicName)
00105 throw (CMSException);
00106
00118 Receiver(const std::string & cmsUrl, const std::string & cmsUser, const std::string & cmsPassword,
00119 const std::string & topicName, const std::string & messageSelector)
00120 throw (CMSException);
00121
00122 virtual ~Receiver();
00123
00129 std::string getMessageSelector()
00130 throw(CMSException)
00131 {
00132 return consumer->getMessageSelector();
00133 }
00134
00135
00137
00145 SEMAINEMessage * receive() throw(CMSException, semaine::cms::exceptions::SystemConfigurationException);
00146
00155 SEMAINEMessage * receive(int timeout) throw(CMSException, semaine::cms::exceptions::SystemConfigurationException);
00156
00163 SEMAINEMessage * receiveNoWait() throw(CMSException, semaine::cms::exceptions::SystemConfigurationException);
00164
00165
00167
00168 void setMessageListener(SEMAINEMessageAvailableListener * aListener)
00169 throw(CMSException);
00170
00171 SEMAINEMessageAvailableListener * getMessageListener()
00172 {
00173 return listener;
00174 }
00175
00176 virtual void onMessage(const Message * m);
00177
00178 SEMAINEMessage * getMessage();
00179
00180 bool notPickedUp();
00181
00182
00183
00184 protected:
00185
00186 MessageConsumer * consumer;
00187 SEMAINEMessageAvailableListener * listener;
00188 CMSLogger * log;
00189 SEMAINEMessage * message;
00190 decaf::util::concurrent::Mutex mutex;
00191
00192
00194
00203 virtual SEMAINEMessage * createSEMAINEMessage(const Message * message)
00204 throw(semaine::cms::exceptions::MessageFormatException);
00205
00206
00207
00208 };
00209
00210 }
00211 }
00212 }
00213
00214
00215
00216 #endif
00217