LCOV - code coverage report
Current view: top level - asyncConsole/src/console - AsyncConsole.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 6 45 13.3 %
Date: 2025-01-20 13:53:09 Functions: 2 6 33.3 %

          Line data    Source code
       1             : // Copyright 2024 Accenture.
       2             : 
       3             : #include "console/AsyncConsole.h"
       4             : 
       5             : #include "console/SyncCommandWrapper.h"
       6             : #include "logger/ConsoleLogger.h"
       7             : 
       8             : #include <util/command/HelpCommand.h>
       9             : #include <util/command/ParentCommand.h>
      10             : #include <util/format/SharedStringWriter.h>
      11             : 
      12             : #include <estd/string.h>
      13             : 
      14             : namespace
      15             : {
      16           1 : ::util::command::ParentCommand& getParentCommand()
      17             : {
      18           1 :     static ::util::command::ParentCommand parentCommand("root", "root");
      19           1 :     return parentCommand;
      20             : }
      21             : } // namespace
      22             : 
      23             : namespace console
      24             : {
      25             : using ::util::logger::CONSOLE;
      26             : using ::util::logger::Logger;
      27             : 
      28           0 : AsyncConsole::AsyncConsole()
      29           0 : : ::estd::singleton<AsyncConsole>(*this), fpOutputStream(nullptr), fOnLineProcessed()
      30             : {
      31           0 :     static ::util::command::HelpCommand helpCommand(getParentCommand());
      32           0 :     static ::console::SyncCommandWrapper syncCommandWrapper(helpCommand);
      33           0 : }
      34             : 
      35           1 : void AsyncConsole::addCommand(::util::command::ICommand& command)
      36             : {
      37           1 :     getParentCommand().addCommand(command);
      38           1 : }
      39             : 
      40           0 : void AsyncConsole::commandExecuted(::util::command::ICommand::ExecuteResult result)
      41             : {
      42           0 :     AsyncConsole::instance().terminate(result);
      43           0 : }
      44             : 
      45           0 : void AsyncConsole::onLineReceived(
      46             :     ::util::stream::ISharedOutputStream& outputStream,
      47             :     ::estd::string const& line,
      48             :     OnLineProcessed const& onLineProcessed)
      49             : {
      50           0 :     auto const cmd = ::util::string::ConstString(line.c_str(), line.length());
      51           0 :     Logger::info(CONSOLE, "Received console command \"%.*s\"", cmd.length(), cmd.data());
      52             : 
      53           0 :     fOnLineProcessed = onLineProcessed;
      54           0 :     fpOutputStream   = &outputStream;
      55             : 
      56           0 :     ::util::command::ICommand::ExecuteResult const result
      57           0 :         = getParentCommand().execute(cmd, &outputStream);
      58             : 
      59           0 :     if (result.getResult() == ::util::command::ICommand::Result::OK)
      60             :     { // in this case, we terminate since commandExecuted is called
      61           0 :         return;
      62             :     }
      63             : 
      64           0 :     Logger::info(CONSOLE, "Console command failed");
      65             : 
      66           0 :     ::util::format::SharedStringWriter sharedStringWriter(outputStream);
      67           0 :     sharedStringWriter.printf("error\n");
      68             : 
      69           0 :     onLineProcessed();
      70           0 : }
      71             : 
      72           0 : void AsyncConsole::terminate(::util::command::ICommand::ExecuteResult result)
      73             : {
      74           0 :     if (fpOutputStream != nullptr)
      75             :     {
      76           0 :         ::util::format::StringWriter stringWriter(fpOutputStream->startOutput(nullptr));
      77             : 
      78           0 :         switch (result.getResult())
      79             :         {
      80           0 :             case ::util::command::ICommand::Result::OK:
      81           0 :             {
      82           0 :                 Logger::info(CONSOLE, "Console command succeeded");
      83           0 :                 stringWriter.printf("ok\n");
      84             :                 break;
      85             :             }
      86           0 :             default:
      87           0 :             {
      88           0 :                 Logger::info(CONSOLE, "Console command failed");
      89           0 :                 stringWriter.printf("error\n");
      90             :                 break;
      91             :             }
      92             :         }
      93           0 :         fpOutputStream = nullptr;
      94             :     }
      95             : 
      96           0 :     OnLineProcessed onLineProcessed = fOnLineProcessed;
      97           0 :     fOnLineProcessed                = OnLineProcessed();
      98           0 :     onLineProcessed();
      99           0 : }
     100             : 
     101             : } /* namespace console */

Generated by: LCOV version 1.14