Mercurial > irccd
comparison tests/src/libirccd/dynlib-plugin/test_plugin.cpp @ 684:8d93e415c3b4
Irccd: load directly native plugin instead of wrapping it, closes #790 @1h
The boost::dll::import function support importing variables as
boost::shared_ptr, instead of wrapping all individual function, just load the
plugin from the shared object and return it as a std::shared_ptr.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 13 Apr 2018 07:32:10 +0200 |
parents | 152d20dc0e74 |
children | 48afa8c41f50 |
comparison
equal
deleted
inserted
replaced
683:d30793525261 | 684:8d93e415c3b4 |
---|---|
21 #include <irccd/daemon/plugin.hpp> | 21 #include <irccd/daemon/plugin.hpp> |
22 | 22 |
23 namespace irccd { | 23 namespace irccd { |
24 | 24 |
25 class test_plugin : public plugin { | 25 class test_plugin : public plugin { |
26 private: | |
27 plugin_config config_; | |
28 | |
26 public: | 29 public: |
27 using plugin::plugin; | 30 using plugin::plugin; |
28 | 31 |
29 void handle_command(irccd&, const message_event& event) override | 32 plugin_config get_config() override |
30 { | 33 { |
31 event.server->message("test", "handle_command"); | 34 return config_; |
32 } | 35 } |
33 | 36 |
34 void handle_connect(irccd&, const connect_event& event) override | 37 void handle_command(irccd&, const message_event&) override |
35 { | 38 { |
36 event.server->message("test", "handle_connect"); | 39 config_["command"] = "true"; |
37 } | 40 } |
38 | 41 |
39 void handle_invite(irccd&, const invite_event& event) override | 42 void handle_connect(irccd&, const connect_event&) override |
40 { | 43 { |
41 event.server->message("test", "handle_invite"); | 44 config_["connect"] = "true"; |
42 } | 45 } |
43 | 46 |
44 void handle_join(irccd&, const join_event& event) override | 47 void handle_invite(irccd&, const invite_event&) override |
45 { | 48 { |
46 event.server->message("test", "handle_join"); | 49 config_["invite"] = "true"; |
47 } | 50 } |
48 | 51 |
49 void handle_kick(irccd&, const kick_event& event) override | 52 void handle_join(irccd&, const join_event&) override |
50 { | 53 { |
51 event.server->message("test", "handle_kick"); | 54 config_["join"] = "true"; |
52 } | 55 } |
53 | 56 |
54 void handle_message(irccd&, const message_event& event) override | 57 void handle_kick(irccd&, const kick_event&) override |
55 { | 58 { |
56 event.server->message("test", "handle_message"); | 59 config_["kick"] = "true"; |
57 } | 60 } |
58 | 61 |
59 void handle_me(irccd&, const me_event& event) override | 62 void handle_load(irccd&) override |
60 { | 63 { |
61 event.server->message("test", "handle_me"); | 64 config_["load"] = "true"; |
62 } | 65 } |
63 | 66 |
64 void handle_mode(irccd&, const mode_event& event) override | 67 void handle_message(irccd&, const message_event&) override |
65 { | 68 { |
66 event.server->message("test", "handle_mode"); | 69 config_["message"] = "true"; |
67 } | 70 } |
68 | 71 |
69 void handle_names(irccd&, const names_event& event) override | 72 void handle_me(irccd&, const me_event&) override |
70 { | 73 { |
71 event.server->message("test", "handle_names"); | 74 config_["me"] = "true"; |
72 } | 75 } |
73 | 76 |
74 void handle_nick(irccd&, const nick_event& event) override | 77 void handle_mode(irccd&, const mode_event&) override |
75 { | 78 { |
76 event.server->message("test", "handle_nick"); | 79 config_["mode"] = "true"; |
77 } | 80 } |
78 | 81 |
79 void handle_notice(irccd&, const notice_event& event) override | 82 void handle_names(irccd&, const names_event&) override |
80 { | 83 { |
81 event.server->message("test", "handle_notice"); | 84 config_["names"] = "true"; |
82 } | 85 } |
83 | 86 |
84 void handle_part(irccd&, const part_event& event) override | 87 void handle_nick(irccd&, const nick_event&) override |
85 { | 88 { |
86 event.server->message("test", "handle_part"); | 89 config_["nick"] = "true"; |
87 } | 90 } |
88 | 91 |
89 void handle_topic(irccd&, const topic_event& event) override | 92 void handle_notice(irccd&, const notice_event&) override |
90 { | 93 { |
91 event.server->message("test", "handle_topic"); | 94 config_["notice"] = "true"; |
92 } | 95 } |
93 | 96 |
94 void handle_whois(irccd&, const whois_event& event) override | 97 void handle_part(irccd&, const part_event&) override |
95 { | 98 { |
96 event.server->message("test", "handle_whois"); | 99 config_["part"] = "true"; |
100 } | |
101 | |
102 void handle_reload(irccd&) override | |
103 { | |
104 config_["reload"] = "true"; | |
105 } | |
106 | |
107 void handle_topic(irccd&, const topic_event&) override | |
108 { | |
109 config_["topic"] = "true"; | |
110 } | |
111 | |
112 void handle_unload(irccd&) override | |
113 { | |
114 config_["unload"] = "true"; | |
115 } | |
116 | |
117 void handle_whois(irccd&, const whois_event&) override | |
118 { | |
119 config_["whois"] = "true"; | |
97 } | 120 } |
98 }; | 121 }; |
99 | 122 |
123 extern "C" BOOST_SYMBOL_EXPORT test_plugin irccd_plugin_test_plugin; | |
124 | |
125 test_plugin irccd_plugin_test_plugin("test", ""); | |
126 | |
100 } // !irccd | 127 } // !irccd |
101 | |
102 extern "C" { | |
103 | |
104 BOOST_SYMBOL_EXPORT | |
105 std::unique_ptr<irccd::plugin> irccd_testplugin_load(std::string name, std::string path) | |
106 { | |
107 return std::make_unique<irccd::test_plugin>(name, path); | |
108 } | |
109 | |
110 } // !C |