Made EventManager class static

This commit is contained in:
Nav
2022-03-20 17:37:36 +00:00
parent 9922d1eca7
commit 7437f0a31e
12 changed files with 44 additions and 52 deletions

View File

@@ -88,7 +88,7 @@ namespace Bloom
void Application::startup() { void Application::startup() {
auto& applicationEventListener = this->applicationEventListener; auto& applicationEventListener = this->applicationEventListener;
this->eventManager.registerListener(applicationEventListener); EventManager::registerListener(applicationEventListener);
applicationEventListener->registerCallbackForEventType<Events::ShutdownApplication>( applicationEventListener->registerCallbackForEventType<Events::ShutdownApplication>(
std::bind(&Application::onShutdownApplicationRequest, this, std::placeholders::_1) std::bind(&Application::onShutdownApplicationRequest, this, std::placeholders::_1)
); );
@@ -378,7 +378,7 @@ namespace Bloom
auto targetControllerState = this->targetController->getThreadState(); auto targetControllerState = this->targetController->getThreadState();
if (targetControllerState == ThreadState::STARTING || targetControllerState == ThreadState::READY) { if (targetControllerState == ThreadState::STARTING || targetControllerState == ThreadState::READY) {
this->eventManager.triggerEvent(std::make_shared<Events::ShutdownTargetController>()); EventManager::triggerEvent(std::make_shared<Events::ShutdownTargetController>());
this->applicationEventListener->waitForEvent<Events::TargetControllerThreadStateChanged>( this->applicationEventListener->waitForEvent<Events::TargetControllerThreadStateChanged>(
std::chrono::milliseconds(10000) std::chrono::milliseconds(10000)
); );
@@ -422,7 +422,7 @@ namespace Bloom
auto debugServerState = this->debugServer->getThreadState(); auto debugServerState = this->debugServer->getThreadState();
if (debugServerState == ThreadState::STARTING || debugServerState == ThreadState::READY) { if (debugServerState == ThreadState::STARTING || debugServerState == ThreadState::READY) {
this->eventManager.triggerEvent(std::make_shared<Events::ShutdownDebugServer>()); EventManager::triggerEvent(std::make_shared<Events::ShutdownDebugServer>());
this->applicationEventListener->waitForEvent<Events::DebugServerThreadStateChanged>( this->applicationEventListener->waitForEvent<Events::DebugServerThreadStateChanged>(
std::chrono::milliseconds(5000) std::chrono::milliseconds(5000)
); );

View File

@@ -30,7 +30,7 @@ namespace Bloom::DebugServers
this->setName("DS"); this->setName("DS");
Logger::info("Starting DebugServer"); Logger::info("Starting DebugServer");
this->eventManager.registerListener(this->eventListener); EventManager::registerListener(this->eventListener);
this->interruptEventNotifier = std::make_shared<EventNotifier>(); this->interruptEventNotifier = std::make_shared<EventNotifier>();
this->eventListener->setInterruptEventNotifier(this->interruptEventNotifier); this->eventListener->setInterruptEventNotifier(this->interruptEventNotifier);
@@ -57,7 +57,7 @@ namespace Bloom::DebugServers
Logger::info("Shutting down DebugServer"); Logger::info("Shutting down DebugServer");
this->close(); this->close();
this->setThreadStateAndEmitEvent(ThreadState::STOPPED); this->setThreadStateAndEmitEvent(ThreadState::STOPPED);
this->eventManager.deregisterListener(this->eventListener->getId()); EventManager::deregisterListener(this->eventListener->getId());
} }
void DebugServer::onShutdownDebugServerEvent(const Events::ShutdownDebugServer& event) { void DebugServer::onShutdownDebugServerEvent(const Events::ShutdownDebugServer& event) {

View File

@@ -107,7 +107,7 @@ namespace Bloom::DebugServers
*/ */
void setThreadStateAndEmitEvent(ThreadState state) { void setThreadStateAndEmitEvent(ThreadState state) {
Thread::setThreadState(state); Thread::setThreadState(state);
this->eventManager.triggerEvent( EventManager::triggerEvent(
std::make_shared<Events::DebugServerThreadStateChanged>(state) std::make_shared<Events::DebugServerThreadStateChanged>(state)
); );
} }

View File

@@ -383,7 +383,7 @@ namespace Bloom::DebugServers::Gdb
this->clientConnection->accept(this->serverSocketFileDescriptor); this->clientConnection->accept(this->serverSocketFileDescriptor);
Logger::info("Accepted GDP RSP connection from " + this->clientConnection->getIpAddress()); Logger::info("Accepted GDP RSP connection from " + this->clientConnection->getIpAddress());
this->eventManager.triggerEvent(std::make_shared<Events::DebugSessionStarted>()); EventManager::triggerEvent(std::make_shared<Events::DebugSessionStarted>());
/* /*
* Before proceeding with a new debug session, we must ensure that the TargetController is able to * Before proceeding with a new debug session, we must ensure that the TargetController is able to

View File

@@ -190,7 +190,7 @@ namespace Bloom::DebugServers::Gdb
if (this->clientConnection.has_value()) { if (this->clientConnection.has_value()) {
this->clientConnection->close(); this->clientConnection->close();
this->clientConnection = std::nullopt; this->clientConnection = std::nullopt;
this->eventManager.triggerEvent(std::make_shared<Events::DebugSessionFinished>()); EventManager::triggerEvent(std::make_shared<Events::DebugSessionFinished>());
} }
} }

View File

@@ -9,19 +9,13 @@
namespace Bloom namespace Bloom
{ {
/** /**
* The EventManager class provides a method of dispatching events to a set of listeners. * The static EventManager class provides a method of dispatching events to a set of listeners.
* A single instance of this class is created in Application class. That instance is then passed by references to
* all other components in Bloom, that require the ability to trigger events.
*
* @TODO: Should this be a static class? As in, all methods and variables declared static. We seem to be
* using it in that way. It would save us from having to pass around that single instance by reference.
* Something to consider.
*/ */
class EventManager class EventManager
{ {
public: public:
/** /**
* Registers an EventListener instance with this manager. * Registers an EventListener instance with the manager.
* *
* All EventListener instances must be registered with the EventManager before any events can * All EventListener instances must be registered with the EventManager before any events can
* be dispatched to them. * be dispatched to them.
@@ -30,7 +24,7 @@ namespace Bloom
* *
* @param listenerName * @param listenerName
*/ */
void registerListener(std::shared_ptr<EventListener> listener); static void registerListener(std::shared_ptr<EventListener> listener);
/** /**
* Deregister an EventListener instance. * Deregister an EventListener instance.
@@ -38,7 +32,7 @@ namespace Bloom
* @param listenerId * @param listenerId
* The ID of the EventListener to deregister. See EventListener::getId(); * The ID of the EventListener to deregister. See EventListener::getId();
*/ */
void deregisterListener(size_t listenerId); static void deregisterListener(size_t listenerId);
/** /**
* Dispatches an event to all registered listeners, if they have registered an interest in the event type. * Dispatches an event to all registered listeners, if they have registered an interest in the event type.
@@ -46,7 +40,7 @@ namespace Bloom
* *
* @param event * @param event
*/ */
void triggerEvent(const Events::SharedGenericEventPointer& event); static void triggerEvent(const Events::SharedGenericEventPointer& event);
/** /**
* Checks if any registered listener is listening for a particular event type. * Checks if any registered listener is listening for a particular event type.
@@ -54,7 +48,7 @@ namespace Bloom
* @param eventType * @param eventType
* @return * @return
*/ */
bool isEventTypeListenedFor(Events::EventType eventType); static bool isEventTypeListenedFor(Events::EventType eventType);
private: private:
/** /**

View File

@@ -24,7 +24,7 @@ namespace Bloom
void InsightWorker::startup() { void InsightWorker::startup() {
Logger::debug("Starting InsightWorker thread"); Logger::debug("Starting InsightWorker thread");
this->eventManager.registerListener(this->eventListener); EventManager::registerListener(this->eventListener);
this->eventListener->registerCallbackForEventType<Events::TargetControllerStateReported>( this->eventListener->registerCallbackForEventType<Events::TargetControllerStateReported>(
std::bind(&InsightWorker::onTargetControllerStateReportedEvent, this, std::placeholders::_1) std::bind(&InsightWorker::onTargetControllerStateReportedEvent, this, std::placeholders::_1)
@@ -48,7 +48,7 @@ namespace Bloom
QObject::connect(this, &InsightWorker::taskQueued, this, &InsightWorker::executeTasks); QObject::connect(this, &InsightWorker::taskQueued, this, &InsightWorker::executeTasks);
this->eventManager.triggerEvent( EventManager::triggerEvent(
std::make_shared<Events::InsightThreadStateChanged>(ThreadState::READY) std::make_shared<Events::InsightThreadStateChanged>(ThreadState::READY)
); );

View File

@@ -78,6 +78,6 @@ namespace Bloom
} }
Logger::info("Attempting clean shutdown"); Logger::info("Attempting clean shutdown");
this->eventManager.triggerEvent(std::make_shared<Events::ShutdownApplication>()); EventManager::triggerEvent(std::make_shared<Events::ShutdownApplication>());
} }
} }

View File

@@ -73,7 +73,7 @@ namespace Bloom
Logger::info("Starting TargetController"); Logger::info("Starting TargetController");
this->setThreadState(ThreadState::STARTING); this->setThreadState(ThreadState::STARTING);
this->blockAllSignalsOnCurrentThread(); this->blockAllSignalsOnCurrentThread();
this->eventManager.registerListener(this->eventListener); EventManager::registerListener(this->eventListener);
// Install Bloom's udev rules if not already installed // Install Bloom's udev rules if not already installed
TargetController::checkUdevRules(); TargetController::checkUdevRules();
@@ -132,7 +132,7 @@ namespace Bloom
try { try {
Logger::info("Shutting down TargetController"); Logger::info("Shutting down TargetController");
this->eventManager.deregisterListener(this->eventListener->getId()); EventManager::deregisterListener(this->eventListener->getId());
this->releaseHardware(); this->releaseHardware();
} catch (const std::exception& exception) { } catch (const std::exception& exception) {
@@ -184,9 +184,7 @@ namespace Bloom
this->registerAddressRangeByMemoryType.clear(); this->registerAddressRangeByMemoryType.clear();
this->state = TargetControllerState::SUSPENDED; this->state = TargetControllerState::SUSPENDED;
this->eventManager.triggerEvent( EventManager::triggerEvent(std::make_shared<TargetControllerStateReported>(this->state));
std::make_shared<TargetControllerStateReported>(this->state)
);
Logger::debug("TargetController suspended"); Logger::debug("TargetController suspended");
} }
@@ -260,7 +258,7 @@ namespace Bloom
); );
this->state = TargetControllerState::ACTIVE; this->state = TargetControllerState::ACTIVE;
this->eventManager.triggerEvent( EventManager::triggerEvent(
std::make_shared<TargetControllerStateReported>(this->state) std::make_shared<TargetControllerStateReported>(this->state)
); );
@@ -435,7 +433,7 @@ namespace Bloom
if (newTargetState == TargetState::STOPPED) { if (newTargetState == TargetState::STOPPED) {
Logger::debug("Target state changed - STOPPED"); Logger::debug("Target state changed - STOPPED");
this->eventManager.triggerEvent(std::make_shared<TargetExecutionStopped>( EventManager::triggerEvent(std::make_shared<TargetExecutionStopped>(
this->target->getProgramCounter(), this->target->getProgramCounter(),
TargetBreakCause::UNKNOWN TargetBreakCause::UNKNOWN
)); ));
@@ -443,7 +441,7 @@ namespace Bloom
if (newTargetState == TargetState::RUNNING) { if (newTargetState == TargetState::RUNNING) {
Logger::debug("Target state changed - RUNNING"); Logger::debug("Target state changed - RUNNING");
this->eventManager.triggerEvent(std::make_shared<TargetExecutionResumed>()); EventManager::triggerEvent(std::make_shared<TargetExecutionResumed>());
} }
} }
} }
@@ -452,7 +450,7 @@ namespace Bloom
auto errorEvent = std::make_shared<Events::TargetControllerErrorOccurred>(); auto errorEvent = std::make_shared<Events::TargetControllerErrorOccurred>();
errorEvent->correlationId = correlationId; errorEvent->correlationId = correlationId;
errorEvent->errorMessage = errorMessage; errorEvent->errorMessage = errorMessage;
this->eventManager.triggerEvent(errorEvent); EventManager::triggerEvent(errorEvent);
} }
Targets::TargetDescriptor& TargetController::getTargetDescriptor() { Targets::TargetDescriptor& TargetController::getTargetDescriptor() {
@@ -470,7 +468,7 @@ namespace Bloom
void TargetController::onStateReportRequest(const Events::ReportTargetControllerState& event) { void TargetController::onStateReportRequest(const Events::ReportTargetControllerState& event) {
auto stateEvent = std::make_shared<Events::TargetControllerStateReported>(this->state); auto stateEvent = std::make_shared<Events::TargetControllerStateReported>(this->state);
stateEvent->correlationId = event.id; stateEvent->correlationId = event.id;
this->eventManager.triggerEvent(stateEvent); EventManager::triggerEvent(stateEvent);
} }
void TargetController::onExtractTargetDescriptor(const Events::ExtractTargetDescriptor& event) { void TargetController::onExtractTargetDescriptor(const Events::ExtractTargetDescriptor& event) {
@@ -478,7 +476,7 @@ namespace Bloom
targetDescriptorExtracted->targetDescriptor = this->getTargetDescriptor(); targetDescriptorExtracted->targetDescriptor = this->getTargetDescriptor();
targetDescriptorExtracted->correlationId = event.id; targetDescriptorExtracted->correlationId = event.id;
this->eventManager.triggerEvent(targetDescriptorExtracted); EventManager::triggerEvent(targetDescriptorExtracted);
} }
void TargetController::onDebugSessionStartedEvent(const Events::DebugSessionStarted&) { void TargetController::onDebugSessionStartedEvent(const Events::DebugSessionStarted&) {
@@ -519,7 +517,7 @@ namespace Bloom
); );
executionStoppedEvent->correlationId = event.id; executionStoppedEvent->correlationId = event.id;
this->eventManager.triggerEvent(executionStoppedEvent); EventManager::triggerEvent(executionStoppedEvent);
} }
void TargetController::onStepTargetExecutionEvent(const Events::StepTargetExecution& event) { void TargetController::onStepTargetExecutionEvent(const Events::StepTargetExecution& event) {
@@ -538,7 +536,7 @@ namespace Bloom
auto executionResumedEvent = std::make_shared<Events::TargetExecutionResumed>(); auto executionResumedEvent = std::make_shared<Events::TargetExecutionResumed>();
executionResumedEvent->correlationId = event.id; executionResumedEvent->correlationId = event.id;
this->eventManager.triggerEvent(executionResumedEvent); EventManager::triggerEvent(executionResumedEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to step execution on target - " + exception.getMessage()); Logger::error("Failed to step execution on target - " + exception.getMessage());
@@ -559,7 +557,7 @@ namespace Bloom
auto executionResumedEvent = std::make_shared<Events::TargetExecutionResumed>(); auto executionResumedEvent = std::make_shared<Events::TargetExecutionResumed>();
executionResumedEvent->correlationId = event.id; executionResumedEvent->correlationId = event.id;
this->eventManager.triggerEvent(executionResumedEvent); EventManager::triggerEvent(executionResumedEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to resume execution on target - " + exception.getMessage()); Logger::error("Failed to resume execution on target - " + exception.getMessage());
@@ -575,7 +573,7 @@ namespace Bloom
auto registersRetrievedEvent = std::make_shared<Events::RegistersRetrievedFromTarget>(); auto registersRetrievedEvent = std::make_shared<Events::RegistersRetrievedFromTarget>();
registersRetrievedEvent->correlationId = event.id; registersRetrievedEvent->correlationId = event.id;
registersRetrievedEvent->registers = registers; registersRetrievedEvent->registers = registers;
this->eventManager.triggerEvent(registersRetrievedEvent); EventManager::triggerEvent(registersRetrievedEvent);
} }
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
@@ -592,7 +590,7 @@ namespace Bloom
registersWrittenEvent->correlationId = event.id; registersWrittenEvent->correlationId = event.id;
registersWrittenEvent->registers = event.registers; registersWrittenEvent->registers = event.registers;
this->eventManager.triggerEvent(registersWrittenEvent); EventManager::triggerEvent(registersWrittenEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to write registers to target - " + exception.getMessage()); Logger::error("Failed to write registers to target - " + exception.getMessage());
@@ -611,7 +609,7 @@ namespace Bloom
event.excludedAddressRanges event.excludedAddressRanges
); );
this->eventManager.triggerEvent(memoryReadEvent); EventManager::triggerEvent(memoryReadEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to read memory from target - " + exception.getMessage()); Logger::error("Failed to read memory from target - " + exception.getMessage());
@@ -629,9 +627,9 @@ namespace Bloom
auto memoryWrittenEvent = std::make_shared<Events::MemoryWrittenToTarget>(); auto memoryWrittenEvent = std::make_shared<Events::MemoryWrittenToTarget>();
memoryWrittenEvent->correlationId = event.id; memoryWrittenEvent->correlationId = event.id;
this->eventManager.triggerEvent(memoryWrittenEvent); EventManager::triggerEvent(memoryWrittenEvent);
if (this->eventManager.isEventTypeListenedFor(Events::RegistersWrittenToTarget::type) if (EventManager::isEventTypeListenedFor(Events::RegistersWrittenToTarget::type)
&& this->registerDescriptorsByMemoryType.contains(event.memoryType) && this->registerDescriptorsByMemoryType.contains(event.memoryType)
) { ) {
/* /*
@@ -665,7 +663,7 @@ namespace Bloom
)); ));
} }
this->eventManager.triggerEvent(registersWrittenEvent); EventManager::triggerEvent(registersWrittenEvent);
} }
} }
@@ -681,7 +679,7 @@ namespace Bloom
auto breakpointSetEvent = std::make_shared<Events::BreakpointSetOnTarget>(); auto breakpointSetEvent = std::make_shared<Events::BreakpointSetOnTarget>();
breakpointSetEvent->correlationId = event.id; breakpointSetEvent->correlationId = event.id;
this->eventManager.triggerEvent(breakpointSetEvent); EventManager::triggerEvent(breakpointSetEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to set breakpoint on target - " + exception.getMessage()); Logger::error("Failed to set breakpoint on target - " + exception.getMessage());
@@ -695,7 +693,7 @@ namespace Bloom
auto breakpointRemovedEvent = std::make_shared<Events::BreakpointRemovedOnTarget>(); auto breakpointRemovedEvent = std::make_shared<Events::BreakpointRemovedOnTarget>();
breakpointRemovedEvent->correlationId = event.id; breakpointRemovedEvent->correlationId = event.id;
this->eventManager.triggerEvent(breakpointRemovedEvent); EventManager::triggerEvent(breakpointRemovedEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to remove breakpoint on target - " + exception.getMessage()); Logger::error("Failed to remove breakpoint on target - " + exception.getMessage());
@@ -715,7 +713,7 @@ namespace Bloom
auto programCounterSetEvent = std::make_shared<Events::ProgramCounterSetOnTarget>(); auto programCounterSetEvent = std::make_shared<Events::ProgramCounterSetOnTarget>();
programCounterSetEvent->correlationId = event.id; programCounterSetEvent->correlationId = event.id;
this->eventManager.triggerEvent(programCounterSetEvent); EventManager::triggerEvent(programCounterSetEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to set program counter on target - " + exception.getMessage()); Logger::error("Failed to set program counter on target - " + exception.getMessage());
@@ -749,7 +747,7 @@ namespace Bloom
pinStatesRetrieved->variantId = event.variantId; pinStatesRetrieved->variantId = event.variantId;
pinStatesRetrieved->pinSatesByNumber = this->target->getPinStates(event.variantId); pinStatesRetrieved->pinSatesByNumber = this->target->getPinStates(event.variantId);
this->eventManager.triggerEvent(pinStatesRetrieved); EventManager::triggerEvent(pinStatesRetrieved);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to retrieve target pin states - " + exception.getMessage()); Logger::error("Failed to retrieve target pin states - " + exception.getMessage());
@@ -774,7 +772,7 @@ namespace Bloom
{event.pinDescriptor.number, event.pinState} {event.pinDescriptor.number, event.pinState}
}; };
this->eventManager.triggerEvent(pinStatesUpdateEvent); EventManager::triggerEvent(pinStatesUpdateEvent);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to set target pin state for pin " + event.pinDescriptor.name + " - " Logger::error("Failed to set target pin state for pin " + event.pinDescriptor.name + " - "
@@ -795,7 +793,7 @@ namespace Bloom
stackPointerRetrieved->correlationId = event.id; stackPointerRetrieved->correlationId = event.id;
stackPointerRetrieved->stackPointer = this->target->getStackPointer(); stackPointerRetrieved->stackPointer = this->target->getStackPointer();
this->eventManager.triggerEvent(stackPointerRetrieved); EventManager::triggerEvent(stackPointerRetrieved);
} catch (const TargetOperationFailure& exception) { } catch (const TargetOperationFailure& exception) {
Logger::error("Failed to retrieve stack pointer value from target - " + exception.getMessage()); Logger::error("Failed to retrieve stack pointer value from target - " + exception.getMessage());

View File

@@ -207,7 +207,7 @@ namespace Bloom
*/ */
void setThreadStateAndEmitEvent(ThreadState state) { void setThreadStateAndEmitEvent(ThreadState state) {
this->setThreadState(state); this->setThreadState(state);
this->eventManager.triggerEvent( EventManager::triggerEvent(
std::make_shared<Events::TargetControllerThreadStateChanged>(state) std::make_shared<Events::TargetControllerThreadStateChanged>(state)
); );
} }

View File

@@ -117,7 +117,7 @@ namespace Bloom
auto requestEvent = std::make_shared<RetrieveTargetPinStates>(); auto requestEvent = std::make_shared<RetrieveTargetPinStates>();
requestEvent->variantId = variantId; requestEvent->variantId = variantId;
this->eventManager.triggerEvent(requestEvent); EventManager::triggerEvent(requestEvent);
} }
Targets::TargetPinStateMappingType TargetControllerConsole::getPinStates(int variantId) { Targets::TargetPinStateMappingType TargetControllerConsole::getPinStates(int variantId) {

View File

@@ -207,7 +207,7 @@ namespace Bloom
deRegisterEventType = true; deRegisterEventType = true;
} }
this->eventManager.triggerEvent(event); EventManager::triggerEvent(event);
auto responseEvent = this->eventListener.waitForEvent< auto responseEvent = this->eventListener.waitForEvent<
ResponseEventType, ResponseEventType,