Removed EventManager and EventListener dependency from TargetControllerConsole class

This commit is contained in:
Nav
2022-05-01 18:57:45 +01:00
parent fe846e0d7c
commit e6cd1faef1
5 changed files with 4 additions and 86 deletions

View File

@@ -114,9 +114,7 @@ namespace Bloom::DebugServer::Gdb
* *
* See documentation in src/DebugServer/Gdb/README.md for more on how GDB commands are processed. * See documentation in src/DebugServer/Gdb/README.md for more on how GDB commands are processed.
*/ */
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole( TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole();
this->eventListener
);
/** /**
* Listening socket address * Listening socket address

View File

@@ -78,9 +78,7 @@ namespace Bloom
this->insightProjectSettings this->insightProjectSettings
); );
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole( TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole();
this->eventListener
);
/** /**
* Insight consists of two threads - the main thread where the main Qt event loop runs (for the GUI), and * Insight consists of two threads - the main thread where the main Qt event loop runs (for the GUI), and

View File

@@ -46,9 +46,7 @@ namespace Bloom
private: private:
EventListenerPointer eventListener = std::make_shared<EventListener>("InsightWorkerEventListener"); EventListenerPointer eventListener = std::make_shared<EventListener>("InsightWorkerEventListener");
TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole( TargetController::TargetControllerConsole targetControllerConsole = TargetController::TargetControllerConsole();
*(this->eventListener)
);
Targets::TargetState lastTargetState = Targets::TargetState::UNKNOWN; Targets::TargetState lastTargetState = Targets::TargetState::UNKNOWN;

View File

@@ -1,7 +1,5 @@
#include "TargetControllerConsole.hpp" #include "TargetControllerConsole.hpp"
#include "src/EventManager/Events/Events.hpp"
#include "TargetControllerComponent.hpp" #include "TargetControllerComponent.hpp"
// Commands // Commands
@@ -28,7 +26,6 @@
namespace Bloom::TargetController namespace Bloom::TargetController
{ {
using namespace Bloom::Targets; using namespace Bloom::Targets;
using namespace Bloom::Events;
using namespace Bloom::Exceptions; using namespace Bloom::Exceptions;
using Commands::GetTargetDescriptor; using Commands::GetTargetDescriptor;
@@ -49,10 +46,6 @@ namespace Bloom::TargetController
using Commands::GetTargetStackPointer; using Commands::GetTargetStackPointer;
using Commands::GetTargetProgramCounter; using Commands::GetTargetProgramCounter;
TargetControllerConsole::TargetControllerConsole(EventListener& eventListener)
: eventListener(eventListener)
{}
TargetControllerState TargetControllerConsole::getTargetControllerState() { TargetControllerState TargetControllerConsole::getTargetControllerState() {
return TargetControllerComponent::getState(); return TargetControllerComponent::getState();
} }

View File

@@ -6,9 +6,6 @@
#include "CommandManager.hpp" #include "CommandManager.hpp"
#include "TargetControllerState.hpp" #include "TargetControllerState.hpp"
#include "src/EventManager/EventListener.hpp"
#include "src/EventManager/EventManager.hpp"
#include "src/Targets/TargetState.hpp" #include "src/Targets/TargetState.hpp"
#include "src/Targets/TargetRegister.hpp" #include "src/Targets/TargetRegister.hpp"
#include "src/Targets/TargetMemory.hpp" #include "src/Targets/TargetMemory.hpp"
@@ -26,7 +23,7 @@ namespace Bloom::TargetController
class TargetControllerConsole class TargetControllerConsole
{ {
public: public:
TargetControllerConsole(EventListener& eventListener); TargetControllerConsole() = default;
void setDefaultTimeout(std::chrono::milliseconds timeout) { void setDefaultTimeout(std::chrono::milliseconds timeout) {
this->defaultTimeout = timeout; this->defaultTimeout = timeout;
@@ -187,73 +184,7 @@ namespace Bloom::TargetController
private: private:
CommandManager commandManager = CommandManager(); CommandManager commandManager = CommandManager();
EventListener& eventListener;
std::chrono::milliseconds defaultTimeout = std::chrono::milliseconds(20000); std::chrono::milliseconds defaultTimeout = std::chrono::milliseconds(20000);
/**
* Triggers an event for the TargetController and waits for a response.
*
* To use this method, the triggered event must define a 'TargetControllerResponseType' alias, which should
* specify the type of response expected from the TargetController.
* For an example of this, see the Events::ExtractTargetDescriptor class.
*
* If the TargetController fails to respond within the given time specified by the timeout argument, or it
* responds with an instance of Events::TargetControllerErrorOccurred, this function will throw an exception.
*
* @tparam TriggerEventType
*
* @param event
* Event to trigger.
*
* @param timeout
* The time, in milliseconds, to wait for the TargetController to respond to the event. If this is not
* supplied, this->defaultTimeout will be used.
*
* @return
*/
template<class TriggerEventType>
auto triggerTargetControllerEventAndWaitForResponse(
const Events::SharedEventPointerNonConst<TriggerEventType> event,
std::optional<std::chrono::milliseconds> timeout = {}
) {
using Bloom::Events::SharedEventPointer;
using Bloom::Events::TargetControllerErrorOccurred;
using ResponseEventType = typename TriggerEventType::TargetControllerResponseType;
bool deRegisterEventType = false;
if (!this->eventListener.isEventTypeRegistered<ResponseEventType>()) {
this->eventListener.registerEventType<ResponseEventType>();
deRegisterEventType = true;
}
EventManager::triggerEvent(event);
auto responseEvent = this->eventListener.waitForEvent<
ResponseEventType,
TargetControllerErrorOccurred
>(timeout.value_or(this->defaultTimeout), event->id);
if (deRegisterEventType) {
this->eventListener.deRegisterEventType<ResponseEventType>();
}
if (!responseEvent.has_value()) {
throw Bloom::Exceptions::Exception("Timed out waiting for response from TargetController.");
}
if (!std::holds_alternative<SharedEventPointer<ResponseEventType>>(responseEvent.value())) {
if (std::holds_alternative<SharedEventPointer<TargetControllerErrorOccurred>>(responseEvent.value())) {
auto& tcErrorEvent = std::get<SharedEventPointer<TargetControllerErrorOccurred>>(responseEvent.value());
throw Bloom::Exceptions::Exception(tcErrorEvent->errorMessage);
}
throw Bloom::Exceptions::Exception("Unexpected response from TargetController");
}
return std::get<SharedEventPointer<ResponseEventType>>(responseEvent.value());
}
}; };
} }