00001
00002 #ifndef SCT_SUBSCRIPTIONMANAGER_H
00003 #define SCT_SUBSCRIPTIONMANAGER_H
00004
00005 #include "SubscriptionManagerImpl.fwd"
00006
00007 #include <ipc/object.h>
00008 #include "SubscriptionManager.hh"
00009 #include "SpecialSubscribeRequest.h"
00010
00011 namespace Sct {
00012
00013 class SubscriptionManagerImpl : public IPCNamedObject<POA_SubscriptionManagerModule::SubscriptionManager> {
00014 private:
00015 SubscriptionManagerImpl() :
00016 IPCNamedObject<POA_SubscriptionManagerModule::SubscriptionManager>("SCT",
00017 SubscriptionManagerModule::SubscriptionManager::instanceName) {
00018 };
00019 public:
00020 static SubscriptionManagerImpl & instance() {
00021 static SubscriptionManagerImpl theInstance;
00022 return theInstance;
00023 };
00024
00025
00027
00029
00030 virtual CORBA::Long whatNumberIsThis(CORBA::Long number) {
00031 return number;
00032 };
00033 virtual void subscribe_special(const char* serverPattern,
00034 const char* objectPattern,
00035 CORBA::Boolean server_is_regular_expression,
00036 CORBA::Boolean object_is_regular_expression,
00037 is::callback_ptr cb);
00039 virtual void debugDumpSubscriptions();
00040
00042
00044
00045 virtual void shutdown() {
00046
00047 };
00049 void startCatchingSignals();
00050 ~SubscriptionManagerImpl() {
00051 std::cout << "Withdrawing from service due to demise of self." << std::endl;
00052 this->tidyUpAndWithdrawEtc();
00053 };
00054
00055 static void acceptSignal(int signum);
00056 private:
00057 void tidyUpAndWithdrawEtc();
00058 typedef std::list<SpecialSubscribeRequest> SpecialSubscribeRequests;
00059 SpecialSubscribeRequests m_specialSubscribeRequests;
00060 };
00061
00062 };
00063
00064 #endif