// Copyright 2011-2019 Molecular Matters GmbH, all rights reserved. #include "LC_CommandMap.h" #include "LC_DuplexPipe.h" namespace { template static bool DefaultAction(const DuplexPipe* pipe, void*) { // receive command and continue execution T command = {}; const bool success = pipe->ReceiveCommand(&command); pipe->SendAck(); if (!success) { return false; } return true; } template static void RegisterDefaultAction(CommandMap::Action* actions) { actions[T::ID] = &DefaultAction; } } CommandMap::CommandMap(void) : m_actions() { // register default handlers that receive command data and continue execution RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); // BEGIN EPIC MOD - Adding ShowConsole command RegisterDefaultAction(m_actions); // END EPIC MOD // BEGIN EPIC MOD - Adding SetVisible command RegisterDefaultAction(m_actions); // END EPIC MOD // BEGIN EPIC MOD - Adding SetActive command RegisterDefaultAction(m_actions); // END EPIC MOD // BEGIN EPIC MOD - Adding SetBuildArguments command RegisterDefaultAction(m_actions); // END EPIC MOD RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); } CommandMap::~CommandMap(void) { } bool CommandMap::HandleCommands(const DuplexPipe* pipe, void* context) { for (;;) { // fetch incoming command id uint32_t commandId = 0u; { const bool success = pipe->ReceiveCommandId(&commandId); if (!success) { return false; } } // call handler for this command const Action action = m_actions[commandId]; const bool continueExecution = action(pipe, context); if (!continueExecution) { return true; } } }