diff options
Diffstat (limited to 'command/sol_cmds.cpp')
-rw-r--r-- | command/sol_cmds.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/command/sol_cmds.cpp b/command/sol_cmds.cpp new file mode 100644 index 0000000..8f5b0c6 --- /dev/null +++ b/command/sol_cmds.cpp @@ -0,0 +1,52 @@ +#include <phosphor-logging/log.hpp> +#include "main.hpp" +#include "sol/sol_context.hpp" +#include "sol/sol_manager.hpp" +#include "sol_cmds.hpp" + +namespace sol +{ + +namespace command +{ + +using namespace phosphor::logging; + +std::vector<uint8_t> payloadHandler(std::vector<uint8_t>& inPayload, + const message::Handler& handler) +{ + auto request = reinterpret_cast<Payload*>(inPayload.data()); + + auto solDataSize = inPayload.size() - sizeof(Payload); + + Buffer charData(solDataSize); + if( solDataSize > 0) + { + std::copy_n(inPayload.data() + sizeof(Payload), + solDataSize, + charData.begin()); + } + + try + { + auto& context = std::get<sol::Manager&>(singletonPool). + getContext(handler.sessionID); + + context.processInboundPayload(request->packetSeqNum, + request->packetAckSeqNum, + request->acceptedCharCount, + request->inOperation.ack, + charData); + } + catch (std::exception& e) + { + log<level::ERR>(e.what()); + return std::vector<uint8_t>(); + } + + return std::vector<uint8_t>(); +} + +} // namespace command + +} // namespace sol |