From 7437f0a31eb501a7b53300d0314262886d444aff Mon Sep 17 00:00:00 2001 From: Nav Date: Sun, 20 Mar 2022 17:37:36 +0000 Subject: [PATCH] Made EventManager class static --- src/Application.cpp | 6 +-- src/DebugServers/DebugServer.cpp | 4 +- src/DebugServers/DebugServer.hpp | 2 +- src/DebugServers/GdbRsp/GdbRspDebugServer.cpp | 2 +- src/DebugServers/GdbRsp/GdbRspDebugServer.hpp | 2 +- src/EventManager/EventManager.hpp | 18 +++---- src/Insight/InsightWorker/InsightWorker.cpp | 4 +- src/SignalHandler/SignalHandler.cpp | 2 +- src/TargetController/TargetController.cpp | 50 +++++++++---------- src/TargetController/TargetController.hpp | 2 +- .../TargetControllerConsole.cpp | 2 +- .../TargetControllerConsole.hpp | 2 +- 12 files changed, 44 insertions(+), 52 deletions(-) diff --git a/src/Application.cpp b/src/Application.cpp index 339c8ce0..995ceb98 100644 --- a/src/Application.cpp +++ b/src/Application.cpp @@ -88,7 +88,7 @@ namespace Bloom void Application::startup() { auto& applicationEventListener = this->applicationEventListener; - this->eventManager.registerListener(applicationEventListener); + EventManager::registerListener(applicationEventListener); applicationEventListener->registerCallbackForEventType( std::bind(&Application::onShutdownApplicationRequest, this, std::placeholders::_1) ); @@ -378,7 +378,7 @@ namespace Bloom auto targetControllerState = this->targetController->getThreadState(); if (targetControllerState == ThreadState::STARTING || targetControllerState == ThreadState::READY) { - this->eventManager.triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared()); this->applicationEventListener->waitForEvent( std::chrono::milliseconds(10000) ); @@ -422,7 +422,7 @@ namespace Bloom auto debugServerState = this->debugServer->getThreadState(); if (debugServerState == ThreadState::STARTING || debugServerState == ThreadState::READY) { - this->eventManager.triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared()); this->applicationEventListener->waitForEvent( std::chrono::milliseconds(5000) ); diff --git a/src/DebugServers/DebugServer.cpp b/src/DebugServers/DebugServer.cpp index ddb321de..43654df3 100644 --- a/src/DebugServers/DebugServer.cpp +++ b/src/DebugServers/DebugServer.cpp @@ -30,7 +30,7 @@ namespace Bloom::DebugServers this->setName("DS"); Logger::info("Starting DebugServer"); - this->eventManager.registerListener(this->eventListener); + EventManager::registerListener(this->eventListener); this->interruptEventNotifier = std::make_shared(); this->eventListener->setInterruptEventNotifier(this->interruptEventNotifier); @@ -57,7 +57,7 @@ namespace Bloom::DebugServers Logger::info("Shutting down DebugServer"); this->close(); this->setThreadStateAndEmitEvent(ThreadState::STOPPED); - this->eventManager.deregisterListener(this->eventListener->getId()); + EventManager::deregisterListener(this->eventListener->getId()); } void DebugServer::onShutdownDebugServerEvent(const Events::ShutdownDebugServer& event) { diff --git a/src/DebugServers/DebugServer.hpp b/src/DebugServers/DebugServer.hpp index 8f9140c4..ccf70005 100644 --- a/src/DebugServers/DebugServer.hpp +++ b/src/DebugServers/DebugServer.hpp @@ -107,7 +107,7 @@ namespace Bloom::DebugServers */ void setThreadStateAndEmitEvent(ThreadState state) { Thread::setThreadState(state); - this->eventManager.triggerEvent( + EventManager::triggerEvent( std::make_shared(state) ); } diff --git a/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp b/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp index 20a65a85..97e02294 100644 --- a/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp +++ b/src/DebugServers/GdbRsp/GdbRspDebugServer.cpp @@ -383,7 +383,7 @@ namespace Bloom::DebugServers::Gdb this->clientConnection->accept(this->serverSocketFileDescriptor); Logger::info("Accepted GDP RSP connection from " + this->clientConnection->getIpAddress()); - this->eventManager.triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared()); /* * Before proceeding with a new debug session, we must ensure that the TargetController is able to diff --git a/src/DebugServers/GdbRsp/GdbRspDebugServer.hpp b/src/DebugServers/GdbRsp/GdbRspDebugServer.hpp index aa19fb5b..7b94d870 100644 --- a/src/DebugServers/GdbRsp/GdbRspDebugServer.hpp +++ b/src/DebugServers/GdbRsp/GdbRspDebugServer.hpp @@ -190,7 +190,7 @@ namespace Bloom::DebugServers::Gdb if (this->clientConnection.has_value()) { this->clientConnection->close(); this->clientConnection = std::nullopt; - this->eventManager.triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared()); } } diff --git a/src/EventManager/EventManager.hpp b/src/EventManager/EventManager.hpp index b5e40ff2..7a6959b9 100644 --- a/src/EventManager/EventManager.hpp +++ b/src/EventManager/EventManager.hpp @@ -9,19 +9,13 @@ namespace Bloom { /** - * The 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. + * The static EventManager class provides a method of dispatching events to a set of listeners. */ class EventManager { 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 * be dispatched to them. @@ -30,7 +24,7 @@ namespace Bloom * * @param listenerName */ - void registerListener(std::shared_ptr listener); + static void registerListener(std::shared_ptr listener); /** * Deregister an EventListener instance. @@ -38,7 +32,7 @@ namespace Bloom * @param listenerId * 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. @@ -46,7 +40,7 @@ namespace Bloom * * @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. @@ -54,7 +48,7 @@ namespace Bloom * @param eventType * @return */ - bool isEventTypeListenedFor(Events::EventType eventType); + static bool isEventTypeListenedFor(Events::EventType eventType); private: /** diff --git a/src/Insight/InsightWorker/InsightWorker.cpp b/src/Insight/InsightWorker/InsightWorker.cpp index 645525c4..06b49304 100644 --- a/src/Insight/InsightWorker/InsightWorker.cpp +++ b/src/Insight/InsightWorker/InsightWorker.cpp @@ -24,7 +24,7 @@ namespace Bloom void InsightWorker::startup() { Logger::debug("Starting InsightWorker thread"); - this->eventManager.registerListener(this->eventListener); + EventManager::registerListener(this->eventListener); this->eventListener->registerCallbackForEventType( std::bind(&InsightWorker::onTargetControllerStateReportedEvent, this, std::placeholders::_1) @@ -48,7 +48,7 @@ namespace Bloom QObject::connect(this, &InsightWorker::taskQueued, this, &InsightWorker::executeTasks); - this->eventManager.triggerEvent( + EventManager::triggerEvent( std::make_shared(ThreadState::READY) ); diff --git a/src/SignalHandler/SignalHandler.cpp b/src/SignalHandler/SignalHandler.cpp index 7924ce50..c60daaab 100644 --- a/src/SignalHandler/SignalHandler.cpp +++ b/src/SignalHandler/SignalHandler.cpp @@ -78,6 +78,6 @@ namespace Bloom } Logger::info("Attempting clean shutdown"); - this->eventManager.triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared()); } } diff --git a/src/TargetController/TargetController.cpp b/src/TargetController/TargetController.cpp index 429f3a01..c967021a 100644 --- a/src/TargetController/TargetController.cpp +++ b/src/TargetController/TargetController.cpp @@ -73,7 +73,7 @@ namespace Bloom Logger::info("Starting TargetController"); this->setThreadState(ThreadState::STARTING); this->blockAllSignalsOnCurrentThread(); - this->eventManager.registerListener(this->eventListener); + EventManager::registerListener(this->eventListener); // Install Bloom's udev rules if not already installed TargetController::checkUdevRules(); @@ -132,7 +132,7 @@ namespace Bloom try { Logger::info("Shutting down TargetController"); - this->eventManager.deregisterListener(this->eventListener->getId()); + EventManager::deregisterListener(this->eventListener->getId()); this->releaseHardware(); } catch (const std::exception& exception) { @@ -184,9 +184,7 @@ namespace Bloom this->registerAddressRangeByMemoryType.clear(); this->state = TargetControllerState::SUSPENDED; - this->eventManager.triggerEvent( - std::make_shared(this->state) - ); + EventManager::triggerEvent(std::make_shared(this->state)); Logger::debug("TargetController suspended"); } @@ -260,7 +258,7 @@ namespace Bloom ); this->state = TargetControllerState::ACTIVE; - this->eventManager.triggerEvent( + EventManager::triggerEvent( std::make_shared(this->state) ); @@ -435,7 +433,7 @@ namespace Bloom if (newTargetState == TargetState::STOPPED) { Logger::debug("Target state changed - STOPPED"); - this->eventManager.triggerEvent(std::make_shared( + EventManager::triggerEvent(std::make_shared( this->target->getProgramCounter(), TargetBreakCause::UNKNOWN )); @@ -443,7 +441,7 @@ namespace Bloom if (newTargetState == TargetState::RUNNING) { Logger::debug("Target state changed - RUNNING"); - this->eventManager.triggerEvent(std::make_shared()); + EventManager::triggerEvent(std::make_shared()); } } } @@ -452,7 +450,7 @@ namespace Bloom auto errorEvent = std::make_shared(); errorEvent->correlationId = correlationId; errorEvent->errorMessage = errorMessage; - this->eventManager.triggerEvent(errorEvent); + EventManager::triggerEvent(errorEvent); } Targets::TargetDescriptor& TargetController::getTargetDescriptor() { @@ -470,7 +468,7 @@ namespace Bloom void TargetController::onStateReportRequest(const Events::ReportTargetControllerState& event) { auto stateEvent = std::make_shared(this->state); stateEvent->correlationId = event.id; - this->eventManager.triggerEvent(stateEvent); + EventManager::triggerEvent(stateEvent); } void TargetController::onExtractTargetDescriptor(const Events::ExtractTargetDescriptor& event) { @@ -478,7 +476,7 @@ namespace Bloom targetDescriptorExtracted->targetDescriptor = this->getTargetDescriptor(); targetDescriptorExtracted->correlationId = event.id; - this->eventManager.triggerEvent(targetDescriptorExtracted); + EventManager::triggerEvent(targetDescriptorExtracted); } void TargetController::onDebugSessionStartedEvent(const Events::DebugSessionStarted&) { @@ -519,7 +517,7 @@ namespace Bloom ); executionStoppedEvent->correlationId = event.id; - this->eventManager.triggerEvent(executionStoppedEvent); + EventManager::triggerEvent(executionStoppedEvent); } void TargetController::onStepTargetExecutionEvent(const Events::StepTargetExecution& event) { @@ -538,7 +536,7 @@ namespace Bloom auto executionResumedEvent = std::make_shared(); executionResumedEvent->correlationId = event.id; - this->eventManager.triggerEvent(executionResumedEvent); + EventManager::triggerEvent(executionResumedEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to step execution on target - " + exception.getMessage()); @@ -559,7 +557,7 @@ namespace Bloom auto executionResumedEvent = std::make_shared(); executionResumedEvent->correlationId = event.id; - this->eventManager.triggerEvent(executionResumedEvent); + EventManager::triggerEvent(executionResumedEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to resume execution on target - " + exception.getMessage()); @@ -575,7 +573,7 @@ namespace Bloom auto registersRetrievedEvent = std::make_shared(); registersRetrievedEvent->correlationId = event.id; registersRetrievedEvent->registers = registers; - this->eventManager.triggerEvent(registersRetrievedEvent); + EventManager::triggerEvent(registersRetrievedEvent); } } catch (const TargetOperationFailure& exception) { @@ -592,7 +590,7 @@ namespace Bloom registersWrittenEvent->correlationId = event.id; registersWrittenEvent->registers = event.registers; - this->eventManager.triggerEvent(registersWrittenEvent); + EventManager::triggerEvent(registersWrittenEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to write registers to target - " + exception.getMessage()); @@ -611,7 +609,7 @@ namespace Bloom event.excludedAddressRanges ); - this->eventManager.triggerEvent(memoryReadEvent); + EventManager::triggerEvent(memoryReadEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to read memory from target - " + exception.getMessage()); @@ -629,9 +627,9 @@ namespace Bloom auto memoryWrittenEvent = std::make_shared(); 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) ) { /* @@ -665,7 +663,7 @@ namespace Bloom )); } - this->eventManager.triggerEvent(registersWrittenEvent); + EventManager::triggerEvent(registersWrittenEvent); } } @@ -681,7 +679,7 @@ namespace Bloom auto breakpointSetEvent = std::make_shared(); breakpointSetEvent->correlationId = event.id; - this->eventManager.triggerEvent(breakpointSetEvent); + EventManager::triggerEvent(breakpointSetEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to set breakpoint on target - " + exception.getMessage()); @@ -695,7 +693,7 @@ namespace Bloom auto breakpointRemovedEvent = std::make_shared(); breakpointRemovedEvent->correlationId = event.id; - this->eventManager.triggerEvent(breakpointRemovedEvent); + EventManager::triggerEvent(breakpointRemovedEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to remove breakpoint on target - " + exception.getMessage()); @@ -715,7 +713,7 @@ namespace Bloom auto programCounterSetEvent = std::make_shared(); programCounterSetEvent->correlationId = event.id; - this->eventManager.triggerEvent(programCounterSetEvent); + EventManager::triggerEvent(programCounterSetEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to set program counter on target - " + exception.getMessage()); @@ -749,7 +747,7 @@ namespace Bloom pinStatesRetrieved->variantId = event.variantId; pinStatesRetrieved->pinSatesByNumber = this->target->getPinStates(event.variantId); - this->eventManager.triggerEvent(pinStatesRetrieved); + EventManager::triggerEvent(pinStatesRetrieved); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to retrieve target pin states - " + exception.getMessage()); @@ -774,7 +772,7 @@ namespace Bloom {event.pinDescriptor.number, event.pinState} }; - this->eventManager.triggerEvent(pinStatesUpdateEvent); + EventManager::triggerEvent(pinStatesUpdateEvent); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to set target pin state for pin " + event.pinDescriptor.name + " - " @@ -795,7 +793,7 @@ namespace Bloom stackPointerRetrieved->correlationId = event.id; stackPointerRetrieved->stackPointer = this->target->getStackPointer(); - this->eventManager.triggerEvent(stackPointerRetrieved); + EventManager::triggerEvent(stackPointerRetrieved); } catch (const TargetOperationFailure& exception) { Logger::error("Failed to retrieve stack pointer value from target - " + exception.getMessage()); diff --git a/src/TargetController/TargetController.hpp b/src/TargetController/TargetController.hpp index 98f3b2d7..8fb4aac5 100644 --- a/src/TargetController/TargetController.hpp +++ b/src/TargetController/TargetController.hpp @@ -207,7 +207,7 @@ namespace Bloom */ void setThreadStateAndEmitEvent(ThreadState state) { this->setThreadState(state); - this->eventManager.triggerEvent( + EventManager::triggerEvent( std::make_shared(state) ); } diff --git a/src/TargetController/TargetControllerConsole.cpp b/src/TargetController/TargetControllerConsole.cpp index b6d4b407..a90d1151 100644 --- a/src/TargetController/TargetControllerConsole.cpp +++ b/src/TargetController/TargetControllerConsole.cpp @@ -117,7 +117,7 @@ namespace Bloom auto requestEvent = std::make_shared(); requestEvent->variantId = variantId; - this->eventManager.triggerEvent(requestEvent); + EventManager::triggerEvent(requestEvent); } Targets::TargetPinStateMappingType TargetControllerConsole::getPinStates(int variantId) { diff --git a/src/TargetController/TargetControllerConsole.hpp b/src/TargetController/TargetControllerConsole.hpp index c9ab019e..aaaaf52d 100644 --- a/src/TargetController/TargetControllerConsole.hpp +++ b/src/TargetController/TargetControllerConsole.hpp @@ -207,7 +207,7 @@ namespace Bloom deRegisterEventType = true; } - this->eventManager.triggerEvent(event); + EventManager::triggerEvent(event); auto responseEvent = this->eventListener.waitForEvent< ResponseEventType,