drogon/drogon_ctl/help.cc

71 lines
2.0 KiB
C++
Raw Normal View History

2018-05-31 09:00:31 +00:00
/**
*
2018-12-07 07:50:18 +00:00
* help.cc
* An Tao
2018-05-31 09:00:31 +00:00
*
* Copyright 2018, An Tao. All rights reserved.
2018-12-07 07:50:18 +00:00
* https://github.com/an-tao/drogon
2018-05-31 09:00:31 +00:00
* Use of this source code is governed by a MIT license
* that can be found in the License file.
*
2018-11-16 05:26:14 +00:00
* Drogon
2018-05-31 09:00:31 +00:00
*
*/
2018-05-28 10:29:14 +00:00
#include "help.h"
#include <drogon/DrClassMap.h>
#include <iostream>
#include <memory>
using namespace drogon_ctl;
void help::handleCommand(std::vector<std::string> &parameters)
2018-05-28 10:29:14 +00:00
{
2018-10-14 07:56:54 +00:00
if (parameters.size() == 0)
2018-05-28 10:29:14 +00:00
{
std::cout << "usage: drogon_ctl [-v | --version] [-h | --help] "
"<command> [<args>]"
<< std::endl;
2018-10-14 07:56:54 +00:00
std::cout << "commands list:" << std::endl;
for (auto &className : drogon::DrClassMap::getAllClassName())
2018-06-07 10:16:30 +00:00
{
2019-05-18 12:39:57 +00:00
auto classPtr = std::shared_ptr<DrObjectBase>(
drogon::DrClassMap::newObject(className));
2018-10-14 07:56:54 +00:00
if (classPtr)
2018-06-07 10:16:30 +00:00
{
2019-05-18 12:39:57 +00:00
auto cmdHdlPtr =
std::dynamic_pointer_cast<CommandHandler>(classPtr);
2018-10-14 07:56:54 +00:00
if (cmdHdlPtr)
2018-06-07 10:16:30 +00:00
{
2018-10-14 07:56:54 +00:00
if (!cmdHdlPtr->isTopCommand())
2018-06-07 10:16:30 +00:00
continue;
2018-10-14 07:56:54 +00:00
auto pos = className.rfind("::");
if (pos != std::string::npos)
2018-06-07 10:16:30 +00:00
{
2018-10-14 07:56:54 +00:00
className = className.substr(pos + 2);
2018-06-07 10:16:30 +00:00
}
2018-10-14 07:56:54 +00:00
while (className.length() < 24)
2018-06-07 10:16:30 +00:00
className.append(" ");
2018-10-14 07:56:54 +00:00
std::cout << className << cmdHdlPtr->script() << std::endl;
2018-06-07 10:16:30 +00:00
}
}
}
}
else
{
2018-10-14 07:56:54 +00:00
auto cmd = std::string("drogon_ctl::") + parameters[0];
2018-06-07 10:16:30 +00:00
2019-05-18 12:39:57 +00:00
auto classPtr =
std::shared_ptr<DrObjectBase>(drogon::DrClassMap::newObject(cmd));
2018-10-14 07:56:54 +00:00
if (classPtr)
2018-05-28 10:29:14 +00:00
{
2019-05-18 12:39:57 +00:00
auto cmdHdlPtr =
std::dynamic_pointer_cast<CommandHandler>(classPtr);
2018-10-14 07:56:54 +00:00
if (cmdHdlPtr)
2018-05-28 10:29:14 +00:00
{
2018-10-14 07:56:54 +00:00
if (cmdHdlPtr->isTopCommand())
std::cout << cmdHdlPtr->detail() << std::endl;
2018-05-28 10:29:14 +00:00
}
}
}
2018-11-16 05:26:14 +00:00
}