00001
00002
00003
00004
00005
00006
00007
00008 #ifndef SEMAINE_CMS_RECEIVER_STATERECEIVER_H
00009 #define SEMAINE_CMS_RECEIVER_STATERECEIVER_H
00010
00011 #include "XMLReceiver.h"
00012
00013 #include <semaine/datatypes/stateinfo/StateInfo.h>
00014 #include <semaine/cms/message/SEMAINEStateMessage.h>
00015 #include <map>
00016
00017 namespace semaine {
00018
00019 namespace cms {
00020
00021 namespace receiver {
00022
00023 class StateReceiver: public semaine::cms::receiver::XMLReceiver {
00024 public:
00038 StateReceiver(const std::string & topicName, semaine::datatypes::stateinfo::StateInfo::Type datatype) throw(CMSException) :
00039 XMLReceiver(topicName), stateInfoType(datatype)
00040 {}
00041
00058 StateReceiver(const std::string & topicName, const std::string & messageSelector, semaine::datatypes::stateinfo::StateInfo::Type datatype)
00059 throw(CMSException) :
00060 XMLReceiver(topicName, messageSelector), stateInfoType(datatype)
00061 {}
00062
00063
00074 StateReceiver(const std::string & cmsUrl, const std::string & cmsUser, const std::string & cmsPassword,
00075 const std::string & topicName, semaine::datatypes::stateinfo::StateInfo::Type datatype)
00076 throw (CMSException) :
00077 XMLReceiver(cmsUrl, cmsUser, cmsPassword, topicName), stateInfoType(datatype)
00078 {}
00079
00093 StateReceiver(const std::string & cmsUrl, const std::string & cmsUser, const std::string & cmsPassword,
00094 const std::string & topicName, const std::string & messageSelector, semaine::datatypes::stateinfo::StateInfo::Type datatype)
00095 throw (CMSException) :
00096 XMLReceiver(cmsUrl, cmsUser, cmsPassword, topicName, messageSelector), stateInfoType(datatype)
00097 {}
00098
00099
00100 virtual ~StateReceiver() {}
00101
00107 std::string getCurrentBestGuess(const std::string & infoItem);
00108 virtual void onMessage(const Message * m);
00109
00110
00111 protected:
00112 virtual semaine::cms::message::SEMAINEMessage * createSEMAINEMessage(const Message * message)
00113 throw(semaine::cms::exceptions::MessageFormatException)
00114 {
00115 return new semaine::cms::message::SEMAINEStateMessage(message, stateInfoType);
00116 }
00117
00118 private:
00119 semaine::datatypes::stateinfo::StateInfo::Type stateInfoType;
00120 std::map<std::string, std::string> currentBestGuess;
00121 void updateInformationState(semaine::cms::message::SEMAINEMessage * m);
00122
00123 };
00124
00125 }
00126
00127 }
00128
00129 }
00130
00131 #endif