summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/Subscriber.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceStorm/Subscriber.cpp')
-rwxr-xr-xcpp/src/IceStorm/Subscriber.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/cpp/src/IceStorm/Subscriber.cpp b/cpp/src/IceStorm/Subscriber.cpp
index 8e9a8c74c38..4733d93d296 100755
--- a/cpp/src/IceStorm/Subscriber.cpp
+++ b/cpp/src/IceStorm/Subscriber.cpp
@@ -78,6 +78,21 @@ private:
};
typedef IceUtil::Handle<PerSubscriberPublisherI> PerSubscriberPublisherIPtr;
+IceStorm::Instrumentation::SubscriberState
+toSubscriberState(Subscriber::SubscriberState s)
+{
+ switch(s)
+ {
+ case Subscriber::SubscriberStateOnline:
+ return IceStorm::Instrumentation::SubscriberStateOnline;
+ case Subscriber::SubscriberStateOffline:
+ return IceStorm::Instrumentation::SubscriberStateOffline;
+ case Subscriber::SubscriberStateError:
+ case Subscriber::SubscriberStateReaped:
+ return IceStorm::Instrumentation::SubscriberStateError;
+ }
+}
+
}
// Each of the various Subscriber types.
@@ -899,7 +914,9 @@ Subscriber::updateObserver()
_rec.topicName,
_rec.obj,
_rec.theQoS,
- _rec.theTopic, _observer.get()));
+ _rec.theTopic,
+ toSubscriberState(_state),
+ _observer.get()));
}
}
@@ -934,6 +951,7 @@ Subscriber::Subscriber(
rec.obj,
rec.theQoS,
rec.theTopic,
+ toSubscriberState(_state),
0));
}
}
@@ -974,6 +992,17 @@ Subscriber::setState(Subscriber::SubscriberState state)
<< " transition from: " << stateToString(_state) << " to: " << stateToString(state);
}
_state = state;
+
+ if(_instance->observer())
+ {
+ _observer.attach(_instance->observer()->getSubscriberObserver(_instance->serviceName(),
+ _rec.topicName,
+ _rec.obj,
+ _rec.theQoS,
+ _rec.theTopic,
+ toSubscriberState(_state),
+ _observer.get()));
+ }
}
}