// Copyright 2011-2020 Molecular Matters GmbH, all rights reserved. #if LC_VERSION == 1 // BEGIN EPIC MOD //#include PCH_INCLUDE // END EPIC MOD #include "LC_CommandMap.h" #include "LC_DuplexPipe.h" namespace { template static bool DefaultAction(const DuplexPipe* pipe, void*, void* payload, size_t payloadSize) { // receive command and continue execution T command = {}; const bool success = pipe->ReceiveCommand(&command, payload, payloadSize); 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); // 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 // BEGIN EPIC MOD RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); RegisterDefaultAction(m_actions); // END EPIC MOD } CommandMap::~CommandMap(void) { } bool CommandMap::HandleCommands(const DuplexPipe* pipe, void* context) { for (;;) { // fetch incoming command header commands::Header header = {}; { const bool success = pipe->ReceiveHeader(&header); if (!success) { return false; } } const Action action = m_actions[header.commandId]; // make space for optional payload void* payload = nullptr; if (header.payloadSize != 0u) { payload = malloc(header.payloadSize); } // call handler for this command const bool continueExecution = action(pipe, context, payload, header.payloadSize); // free payload free(payload); if (!continueExecution) { return true; } } } #endif // LC_VERSION