diff options
author | Ash Wolf <ninji@wuffs.org> | 2023-06-14 00:50:34 +0100 |
---|---|---|
committer | Ash Wolf <ninji@wuffs.org> | 2023-06-14 00:50:34 +0100 |
commit | 37e364b2c6cc7487a1c888d256a73e5337bb7189 (patch) | |
tree | eaf6e857382eef16c2dd940eb4125536fbe068bd /src/T2DLL/LBroadcaster.cpp | |
download | t2win-37e364b2c6cc7487a1c888d256a73e5337bb7189.tar.gz t2win-37e364b2c6cc7487a1c888d256a73e5337bb7189.zip |
initial commit
Diffstat (limited to 'src/T2DLL/LBroadcaster.cpp')
-rw-r--r-- | src/T2DLL/LBroadcaster.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/T2DLL/LBroadcaster.cpp b/src/T2DLL/LBroadcaster.cpp new file mode 100644 index 0000000..3486ce9 --- /dev/null +++ b/src/T2DLL/LBroadcaster.cpp @@ -0,0 +1,46 @@ +#include "LBroadcaster.h" +#include "LListener.h" + +LBroadcaster::LBroadcaster() { + mBroadcasting = true; +} + +LBroadcaster::LBroadcaster(const LBroadcaster& other) { + mBroadcasting = other.mBroadcasting; +} + +/*virtual*/ LBroadcaster::~LBroadcaster() { + BroadcastMessage(0xFFFFFFFF, this); + + LArrayIterator iter(mListeners); + LListener *listener; + + while (iter.Next(&listener)) { + listener->RemoveBroadcaster(this); + } +} + +void LBroadcaster::AddListener(LListener* listener) { + // bug - should pass &listener to FetchIndexOf + if (mListeners.FetchIndexOf(listener) == 0) { + mListeners.Add(&listener); + listener->AddBroadcaster(this); + } +} + +void LBroadcaster::RemoveListener(LListener* listener) { + mListeners.Remove(&listener); + listener->RemoveBroadcaster(this); +} + +void LBroadcaster::BroadcastMessage(unsigned int msg, void* data) { + if (mBroadcasting) { + LArrayIterator iter(mListeners); + LListener *listener; + + while (iter.Next(&listener)) { + if (listener->IsListening()) + listener->ListenToMessage(msg, data); + } + } +} |