| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- #include "UIObservable.h"
- #include "Entity.h"
- #include "Game.h"
- #include "NetworkMessage.h"
- void UIObservable::notifyObservers(NetworkMessage* msg)
- {
- cs.lock();
- int index = 0;
- Framework::Array<int> toDelete;
- for (auto observer : observers)
- {
- Entity* e = Game::INSTANCE->zEntity(observer.sourceEntiryId);
- if (e)
- {
- msg->addressUIElement(
- observer.uimlElementId, observer.networkApiProcessorId);
- Game::INSTANCE->sendMessage(msg->clone(), e);
- }
- else
- toDelete.add(index, 0);
- index++;
- }
- for (int i : toDelete)
- observers.remove(i);
- cs.unlock();
- msg->release();
- }
- void UIObservable::removeObserver(
- Entity* zSource, Framework::Text uimlElementId, int networkApiProcessorId)
- {
- cs.lock();
- int index = 0;
- for (auto observer : observers)
- {
- if (observer.sourceEntiryId == zSource->getId()
- && observer.uimlElementId.istGleich(uimlElementId)
- && observer.networkApiProcessorId == networkApiProcessorId)
- {
- observers.remove(index);
- break;
- }
- index++;
- }
- cs.unlock();
- }
- void UIObservable::addObserver(
- Entity* zSource, Framework::Text uimlElementId, int networkApiProcessorId)
- {
- cs.lock();
- for (auto observer : observers)
- {
- if (observer.sourceEntiryId == zSource->getId()
- && observer.uimlElementId.istGleich(uimlElementId)
- && observer.networkApiProcessorId == networkApiProcessorId)
- {
- cs.unlock();
- return;
- }
- }
- observers.add({zSource->getId(), uimlElementId, networkApiProcessorId});
- for (auto call : onObserverAdded)
- {
- cs.unlock();
- call(zSource, uimlElementId, networkApiProcessorId);
- cs.lock();
- }
- cs.unlock();
- }
- void UIObservable::registerOnObserverAddedCall(std::function<void(
- Entity* zSource, Framework::Text uimlElementId, int processor)> call)
- {
- cs.lock();
- onObserverAdded.add(call);
- cs.unlock();
- }
|