24#include "CommandUtil.hpp"
41 using CommandHandlerMap = std::unordered_map<std::string, std::shared_ptr<CommandHandler>>;
46 void addRuleHandler(
StringView tmpl, std::shared_ptr<CommandHandler> handler);
55template <
typename F,
typename Tuple>
60 : handler_(std::move(f))
64 if (params.size() != std::tuple_size<Tuple>::value) {
65 aError(
"invalid param count");
66 return eErrorInvalidParam;
68 return call(params, result, Tuple{});
72 template <
typename... Args>
77 return detail::fill_result(result,
78 handler_(detail::convert_token<typename Args::type>(params[Args::pos])...));
80 catch(std::exception& e) {
81 result.push_back(e.what());
82 return eErrorInvalidParam;
85 return static_cast<errc_t
>(-1);
95template <
typename F, u
int64_t Tag,
int N>
96std::shared_ptr<CommandHandler> makeCommandHandler(
98 std::integral_constant<uint64_t, Tag>,
99 std::integral_constant<int, N>
102 using ArgTuple = detail::decode_tag<Tag, N>;
103 return std::make_shared<TaggedRule<F, ArgTuple>>(std::move(handler));
106template<u
int64_t Tag,
int N>
115 node_.handler_ = makeCommandHandler(std::move(f), std::integral_constant<uint64_t, Tag>{}, std::integral_constant<int, N>{});
123#define _AST_REGISTER_COMMAND(dispatcher, cmd_template, handler) \
125 constexpr uint64_t tag = detail::get_parameter_tag(cmd_template); \
126 constexpr int n = detail::count_args(cmd_template); \
127 (dispatcher).addRuleHandler(cmd_template, makeCommandHandler(handler, \
128 std::integral_constant<uint64_t, tag>{}, \
129 std::integral_constant<int, n>{})); \
133#define REGISTER_COMMAND(dispatcher, cmd_template, handler) \
134 _AST_REGISTER_COMMAND(dispatcher, cmd_template, handler)
137#define COMMAND_RULE(dispatcher, cmd_template) CommandTrieNodeWrap<detail::get_parameter_tag(cmd_template), detail::count_args(cmd_template)>(dispatcher.addRule(cmd_template))
定义 CommandDispatcher.hpp:39
命令处理接口
定义 CommandRouting.hpp:50
命令参数
定义 CommandRouting.hpp:42
定义 CommandDispatcher.hpp:108
路由树
定义 CommandRouting.hpp:78
定义 CommandDispatcher.hpp:57
errc_t handle(const CommandParams ¶ms, CommandResult &result) const override
定义 CommandDispatcher.hpp:63