changeset 623:4515082ee83f

Irccd: make on-demande command name
author David Demelier <markand@malikania.fr>
date Fri, 22 Dec 2017 11:08:01 +0100
parents c2db630ffd60
children f69b1faf812f
files libirccd/irccd/daemon/command.cpp libirccd/irccd/daemon/command.hpp libirccd/irccd/daemon/command_service.cpp libirccd/irccd/daemon/transport_service.cpp
diffstat 4 files changed, 112 insertions(+), 130 deletions(-) [+]
line wrap: on
line diff
--- a/libirccd/irccd/daemon/command.cpp	Fri Dec 22 10:26:41 2017 +0100
+++ b/libirccd/irccd/daemon/command.cpp	Fri Dec 22 11:08:01 2017 +0100
@@ -165,9 +165,9 @@
 
 } // !namespace
 
-plugin_config_command::plugin_config_command()
-    : command("plugin-config")
+std::string plugin_config_command::get_name() const noexcept
 {
+    return "plugin-config";
 }
 
 void plugin_config_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -180,9 +180,9 @@
         exec_get(client, *plugin, args);
 }
 
-plugin_info_command::plugin_info_command()
-    : command("plugin-info")
+std::string plugin_info_command::get_name() const noexcept
 {
+    return "plugin-info";
 }
 
 void plugin_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -198,9 +198,9 @@
     });
 }
 
-plugin_list_command::plugin_list_command()
-    : command("plugin-list")
+std::string plugin_list_command::get_name() const noexcept
 {
+    return "plugin-list";
 }
 
 void plugin_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&)
@@ -216,9 +216,9 @@
     });
 }
 
-plugin_load_command::plugin_load_command()
-    : command("plugin-load")
+std::string plugin_load_command::get_name() const noexcept
 {
+    return "plugin-load";
 }
 
 void plugin_load_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -227,9 +227,9 @@
     client.success("plugin-load");
 }
 
-plugin_reload_command::plugin_reload_command()
-    : command("plugin-reload")
+std::string plugin_reload_command::get_name() const noexcept
 {
+    return "plugin-reload";
 }
 
 void plugin_reload_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -238,9 +238,9 @@
     client.success("plugin-reload");
 }
 
-plugin_unload_command::plugin_unload_command()
-    : command("plugin-unload")
+std::string plugin_unload_command::get_name() const noexcept
 {
+    return "plugin-unload";
 }
 
 void plugin_unload_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -249,9 +249,9 @@
     client.success("plugin-unload");
 }
 
-server_connect_command::server_connect_command()
-    : command("server-connect")
+std::string server_connect_command::get_name() const noexcept
 {
+    return "server-connect";
 }
 
 void server_connect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -265,9 +265,9 @@
     client.success("server-connect");
 }
 
-server_disconnect_command::server_disconnect_command()
-    : command("server-disconnect")
+std::string server_disconnect_command::get_name() const noexcept
 {
+    return "server-disconnect";
 }
 
 void server_disconnect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -292,9 +292,9 @@
     client.success("server-disconnect");
 }
 
-server_info_command::server_info_command()
-    : command("server-info")
+std::string server_info_command::get_name() const noexcept
 {
+    return "server-invite";
 }
 
 void server_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -323,9 +323,9 @@
     client.send(response);
 }
 
-server_invite_command::server_invite_command()
-    : command("server-invite")
+std::string server_invite_command::get_name() const noexcept
 {
+    return "server-invite";
 }
 
 void server_invite_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -343,9 +343,9 @@
     client.success("server-invite");
 }
 
-server_join_command::server_join_command()
-    : command("server-join")
+std::string server_join_command::get_name() const noexcept
 {
+    return "server-join";
 }
 
 void server_join_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -361,9 +361,9 @@
     client.success("server-join");
 }
 
-server_kick_command::server_kick_command()
-    : command("server-kick")
+std::string server_kick_command::get_name() const noexcept
 {
+    return "server-kick";
 }
 
 void server_kick_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -382,9 +382,9 @@
     client.success("server-kick");
 }
 
-server_list_command::server_list_command()
-    : command("server-list")
+std::string server_list_command::get_name() const noexcept
 {
+    return "server-list";
 }
 
 void server_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&)
@@ -401,9 +401,9 @@
     });
 }
 
-server_me_command::server_me_command()
-    : command("server-me")
+std::string server_me_command::get_name() const noexcept
 {
+    return "server-me";
 }
 
 void server_me_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -419,9 +419,9 @@
     client.success("server-me");
 }
 
-server_message_command::server_message_command()
-    : command("server-message")
+std::string server_message_command::get_name() const noexcept
 {
+    return "server-message";
 }
 
 void server_message_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -437,9 +437,9 @@
     client.success("server-message");
 }
 
-server_mode_command::server_mode_command()
-    : command("server-mode")
+std::string server_mode_command::get_name() const noexcept
 {
+    return "server-mode";
 }
 
 void server_mode_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -461,9 +461,9 @@
     client.success("server-mode");
 }
 
-server_nick_command::server_nick_command()
-    : command("server-nick")
+std::string server_nick_command::get_name() const noexcept
 {
+    return "server-nick";
 }
 
 void server_nick_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -478,9 +478,9 @@
     client.success("server-nick");
 }
 
-server_notice_command::server_notice_command()
-    : command("server-notice")
+std::string server_notice_command::get_name() const noexcept
 {
+    return "server-notice";
 }
 
 void server_notice_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -496,9 +496,9 @@
     client.success("server-notice");
 }
 
-server_part_command::server_part_command()
-    : command("server-part")
+std::string server_part_command::get_name() const noexcept
 {
+    return "server-part";
 }
 
 void server_part_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -514,9 +514,9 @@
     client.success("server-part");
 }
 
-server_reconnect_command::server_reconnect_command()
-    : command("server-reconnect")
+std::string server_reconnect_command::get_name() const noexcept
 {
+    return "server-reconnect";
 }
 
 void server_reconnect_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -542,9 +542,9 @@
     client.success("server-reconnect");
 }
 
-server_topic_command::server_topic_command()
-    : command("server-topic")
+std::string server_topic_command::get_name() const noexcept
 {
+    return "server-topic";
 }
 
 void server_topic_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -560,9 +560,9 @@
     client.success("server-topic");
 }
 
-rule_edit_command::rule_edit_command()
-    : command("rule-edit")
+std::string rule_edit_command::get_name() const noexcept
 {
+    return "rule-edit";
 }
 
 void rule_edit_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -606,9 +606,9 @@
     client.success("rule-edit");
 }
 
-rule_list_command::rule_list_command()
-    : command("rule-list")
+std::string rule_list_command::get_name() const noexcept
 {
+    return "rule-list";
 }
 
 void rule_list_command::exec(irccd& irccd, transport_client& client, const nlohmann::json&)
@@ -624,9 +624,9 @@
     });
 }
 
-rule_info_command::rule_info_command()
-    : command("rule-info")
+std::string rule_info_command::get_name() const noexcept
 {
+    return "rule-info";
 }
 
 void rule_info_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -637,9 +637,9 @@
     client.send(std::move(json));
 }
 
-rule_remove_command::rule_remove_command()
-    : command("rule-remove")
+std::string rule_remove_command::get_name() const noexcept
 {
+    return "rule-remove";
 }
 
 void rule_remove_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -653,9 +653,9 @@
     client.success("rule-remove");
 }
 
-rule_move_command::rule_move_command()
-    : command("rule-move")
+std::string rule_move_command::get_name() const noexcept
 {
+    return "rule-move";
 }
 
 void rule_move_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
@@ -709,9 +709,9 @@
     client.success("rule-move");
 }
 
-rule_add_command::rule_add_command()
-    : command("rule-add")
+std::string rule_add_command::get_name() const noexcept
 {
+    return "rule-add";
 }
 
 void rule_add_command::exec(irccd& irccd, transport_client& client, const nlohmann::json& args)
--- a/libirccd/irccd/daemon/command.hpp	Fri Dec 22 10:26:41 2017 +0100
+++ b/libirccd/irccd/daemon/command.hpp	Fri Dec 22 11:08:01 2017 +0100
@@ -42,23 +42,8 @@
  * \brief Server side remote command
  */
 class command {
-private:
-    std::string name_;
-
 public:
     /**
-     * Construct a command.
-     *
-     * \pre !name.empty()
-     * \param name the command name
-     */
-    inline command(std::string name) noexcept
-        : name_(std::move(name))
-    {
-        assert(!name_.empty());
-    }
-
-    /**
      * Default destructor virtual.
      */
     virtual ~command() = default;
@@ -68,10 +53,7 @@
      *
      * \return the command name
      */
-    inline const std::string& name() const noexcept
-    {
-        return name_;
-    }
+    virtual std::string get_name() const noexcept = 0;
 
     /**
      * Execute the command.
@@ -99,9 +81,9 @@
 class plugin_config_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    plugin_config_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -119,9 +101,9 @@
 class plugin_info_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    plugin_info_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -135,9 +117,9 @@
 class plugin_list_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    plugin_list_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -157,9 +139,9 @@
 class plugin_load_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    plugin_load_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -178,9 +160,9 @@
 class plugin_reload_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    plugin_reload_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -199,9 +181,9 @@
 class plugin_unload_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    plugin_unload_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -223,9 +205,9 @@
 class server_connect_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_connect_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -244,9 +226,9 @@
 class server_disconnect_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_disconnect_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -265,9 +247,9 @@
 class server_info_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_info_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -288,9 +270,9 @@
 class server_invite_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_invite_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -310,9 +292,9 @@
 class server_join_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_join_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -333,9 +315,9 @@
 class server_kick_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_kick_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -349,9 +331,9 @@
 class server_list_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_list_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -371,9 +353,9 @@
 class server_me_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_me_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -393,9 +375,9 @@
 class server_message_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_message_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -416,9 +398,9 @@
 class server_mode_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_mode_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -438,9 +420,9 @@
 class server_nick_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_nick_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -460,9 +442,9 @@
 class server_notice_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_notice_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -482,9 +464,9 @@
 class server_part_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_part_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -503,9 +485,9 @@
 class server_reconnect_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_reconnect_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -525,9 +507,9 @@
 class server_topic_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    server_topic_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -546,9 +528,9 @@
 class rule_edit_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    rule_edit_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -562,9 +544,9 @@
 class rule_list_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    rule_list_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -582,9 +564,9 @@
 class rule_info_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    rule_info_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -602,9 +584,9 @@
 class rule_remove_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    rule_remove_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -622,9 +604,9 @@
 class rule_move_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    rule_move_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
@@ -642,9 +624,9 @@
 class rule_add_command : public command {
 public:
     /**
-     * Constructor.
+     * \copydoc command::get_name
      */
-    rule_add_command();
+    std::string get_name() const noexcept override;
 
     /**
      * \copydoc command::exec
--- a/libirccd/irccd/daemon/command_service.cpp	Fri Dec 22 10:26:41 2017 +0100
+++ b/libirccd/irccd/daemon/command_service.cpp	Fri Dec 22 11:08:01 2017 +0100
@@ -28,7 +28,7 @@
 std::shared_ptr<command> command_service::find(const std::string& name) const noexcept
 {
     auto it = std::find_if(commands_.begin(), commands_.end(), [&] (const auto& cmd) {
-        return cmd->name() == name;
+        return cmd->get_name() == name;
     });
 
     return it == commands_.end() ? nullptr : *it;
@@ -37,7 +37,7 @@
 void command_service::add(std::shared_ptr<command> command)
 {
     auto it = std::find_if(commands_.begin(), commands_.end(), [&] (const auto& cmd) {
-        return cmd->name() == command->name();
+        return cmd->get_name() == command->get_name();
     });
 
     if (it != commands_.end())
--- a/libirccd/irccd/daemon/transport_service.cpp	Fri Dec 22 10:26:41 2017 +0100
+++ b/libirccd/irccd/daemon/transport_service.cpp	Fri Dec 22 11:08:01 2017 +0100
@@ -197,7 +197,7 @@
         try {
             cmd->exec(irccd_, *tc, object);
         } catch (const boost::system::system_error& ex) {
-            tc->error(ex.code(), cmd->name());
+            tc->error(ex.code(), cmd->get_name());
         } catch (const std::exception& ex) {
             irccd_.log().warning() << "transport: unknown error not reported" << std::endl;
             irccd_.log().warning() << "transport: " << ex.what() << std::endl;