summaryrefslogtreecommitdiffhomepage
path: root/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2015-08-18 05:02:34 +0200
committerStanislaw Halik <sthalik@misaki.pl>2016-06-09 10:27:50 +0200
commit24e37795d2db8fdc6f7809e793dadbae80211d26 (patch)
treef2fd152fb44518222e290e555f0274af18d877bd /X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp
parent9a87e2cb6e588641e3cff52655013594c492e033 (diff)
add SDKs
Diffstat (limited to 'X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp')
-rwxr-xr-xX-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp b/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp
new file mode 100755
index 0000000..5fe6218
--- /dev/null
+++ b/X-Plane-SDK/CHeaders/Wrappers/XPCBroadcaster.cpp
@@ -0,0 +1,56 @@
+#include "XPCBroadcaster.h"
+#include "XPCListener.h"
+
+XPCBroadcaster::XPCBroadcaster() :
+ mIterator(NULL)
+{
+}
+
+XPCBroadcaster::~XPCBroadcaster()
+{
+ ListenerVector::iterator iter;
+ mIterator = &iter;
+ for (iter = mListeners.begin(); iter != mListeners.end(); ++iter)
+ {
+ (*iter)->BroadcasterRemoved(this);
+ }
+}
+
+void XPCBroadcaster::AddListener(
+ XPCListener * inListener)
+{
+ mListeners.push_back(inListener);
+ inListener->BroadcasterAdded(this);
+}
+
+void XPCBroadcaster::RemoveListener(
+ XPCListener * inListener)
+{
+ ListenerVector::iterator iter = std::find
+ (mListeners.begin(), mListeners.end(), inListener);
+ if (iter == mListeners.end())
+ return;
+
+ if (mIterator != NULL)
+ {
+ if (*mIterator >= iter)
+ (*mIterator)--;
+ }
+
+ mListeners.erase(iter);
+ inListener->BroadcasterRemoved(this);
+}
+
+void XPCBroadcaster::BroadcastMessage(
+ int inMessage,
+ void * inParam)
+{
+ ListenerVector::iterator iter;
+ mIterator = &iter;
+ for (iter = mListeners.begin(); iter != mListeners.end(); ++iter)
+ {
+ (*iter)->ListenToMessage(inMessage, inParam);
+ }
+ mIterator = NULL;
+}
+