Mercurial > irccd
annotate irccd-test/main.cpp @ 630:711e0bd01eaf
Irccd: move services to service folder
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 07 Mar 2018 17:49:56 +0100 |
parents | 27587ff92a64 |
children | 152d20dc0e74 |
rev | line source |
---|---|
620
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * main.cpp -- irccd-test main file |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
628
27587ff92a64
Misc: update copyrights
David Demelier <markand@malikania.fr>
parents:
621
diff
changeset
|
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr> |
620
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #include <irccd/sysconfig.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 #include <algorithm> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 #include <functional> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 #include <iostream> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 #include <string> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 #include <unordered_map> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <boost/algorithm/string/trim.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 #include <boost/filesystem/path.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 #if defined(HAVE_LIBEDIT) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 # include <histedit.h> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 #endif |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 #include <irccd/options.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 #include <irccd/string_util.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #include <irccd/daemon/dynlib_plugin.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 #include <irccd/daemon/irccd.hpp> |
630
711e0bd01eaf
Irccd: move services to service folder
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
39 |
711e0bd01eaf
Irccd: move services to service folder
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
40 #include <irccd/daemon/service/plugin_service.hpp> |
711e0bd01eaf
Irccd: move services to service folder
David Demelier <markand@malikania.fr>
parents:
628
diff
changeset
|
41 #include <irccd/daemon/service/server_service.hpp> |
620
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 #include <irccd/test/debug_server.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 #if defined(HAVE_JS) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 # include <irccd/js/js_plugin.hpp> |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 #endif |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 namespace irccd { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 namespace su = string_util; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 namespace { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 boost::asio::io_service io; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 std::unique_ptr<irccd> daemon; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 std::shared_ptr<plugin> plugin; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 void usage() |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 std::cerr << "usage: irccd-test [-c config] plugin-name" << std::endl; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 std::exit(1); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 std::shared_ptr<server> get_server(std::string name) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 name = boost::algorithm::trim_copy(name); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 if (name.empty()) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 name = "test"; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 auto s = daemon->servers().get(name); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 if (!s) { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 s = std::make_shared<debug_server>(io, std::move(name)); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 daemon->servers().add(s); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 return s; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 std::string get_arg(const std::vector<std::string>& args, unsigned index) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 if (index >= args.size()) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 return ""; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 return args[index]; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 * onCommand server origin channel message |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 void on_command(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 auto args = su::split(data, " ", 4); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 plugin->on_command(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 get_arg(args, 3) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 * onConnect server |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 void on_connect(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 auto args = su::split(data, " "); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 plugin->on_connect(*daemon, {get_server(get_arg(args, 0))}); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 * onInvite server origin channel target |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 void on_invite(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 auto args = su::split(data, " "); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 plugin->on_invite(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 get_arg(args, 3), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 * onJoin server origin channel |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 void on_join(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 auto args = su::split(data, " "); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 plugin->on_join(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 get_arg(args, 2) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 * onKick server origin channel reason |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 void on_kick(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 auto args = su::split(data, " ", 5); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 plugin->on_kick(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 get_arg(args, 3), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 get_arg(args, 4), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 * onLoad |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 void on_load(const std::string&) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 plugin->on_load(*daemon); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 * onMe server origin channel message |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 void on_me(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 auto args = su::split(data, " ", 4); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 plugin->on_me(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 get_arg(args, 3) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 * onMessage server origin channel message |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 void on_message(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 auto args = su::split(data, " ", 4); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 plugin->on_message(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 get_arg(args, 3) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 * onMode server origin channel mode limit user mask |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 void on_mode(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 auto args = su::split(data, " ", 7); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 plugin->on_mode(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 get_arg(args, 3), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 get_arg(args, 4), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 get_arg(args, 5), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 get_arg(args, 6), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 * onNames server channel nick1 nick2 nickN |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 void on_names(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 auto args = su::split(data, " "); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 names_event ev; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 ev.server = get_server(get_arg(args, 0)); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 ev.channel = get_arg(args, 1); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 if (args.size() >= 3U) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 ev.names.insert(ev.names.begin(), args.begin() + 2, args.end()); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 plugin->on_names(*daemon, ev); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 * onNick server origin nickname |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 void on_nick(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 auto args = su::split(data, " "); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 plugin->on_nick(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 get_arg(args, 2) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 * onNotice server origin channel nickname |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 void on_notice(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 auto args = su::split(data, " ", 4); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 plugin->on_notice(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 get_arg(args, 3) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 * onPart server origin channel reason |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 void on_part(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 auto args = su::split(data, " ", 4); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 plugin->on_part(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 get_arg(args, 3), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 * onReload |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 void on_reload(const std::string&) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 plugin->on_reload(*daemon); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 * onTopic server origin channel topic |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 void on_topic(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 auto args = su::split(data, " ", 4); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 plugin->on_topic(*daemon, { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 get_server(get_arg(args, 0)), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 get_arg(args, 1), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 get_arg(args, 2), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 get_arg(args, 3) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 }); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 * onUnload |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 void on_unload(const std::string&) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 plugin->on_unload(*daemon); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 * onWhois server nick user host realname chan1 chan2 chanN |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 void on_whois(const std::string& data) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 auto args = su::split(data, " "); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 whois_event ev; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 ev.server = get_server(get_arg(args, 0)); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 ev.whois.nick = get_arg(args, 1); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 ev.whois.user = get_arg(args, 2); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 ev.whois.host = get_arg(args, 3); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 ev.whois.realname = get_arg(args, 4); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 if (args.size() >= 5) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 ev.whois.channels.insert(ev.whois.channels.begin(), args.begin() + 5, args.end()); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 plugin->on_whois(*daemon, ev); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 /* |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 * Table of user functions. |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 */ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 using function = std::function<void (const std::string&)>; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 using functions = std::unordered_map<std::string, function>; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 static const functions list{ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 { "onCommand", &(on_command) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 { "onConnect", &(on_connect) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 { "onInvite", &(on_invite) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 { "onJoin", &(on_join) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 { "onKick", &(on_kick) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
343 { "onLoad", &(on_load) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 { "onMe", &(on_me) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 { "onMessage", &(on_message) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 { "onMode", &(on_mode) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 { "onNames", &(on_names) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 { "onNick", &(on_nick) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 { "onNotice", &(on_notice) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 { "onPart", &(on_part) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 { "onReload", &(on_reload) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 { "onTopic", &(on_topic) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 { "onUnload", &(on_unload) }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 { "onWhois", &(on_whois) } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 }; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
356 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 void exec(const std::string& line) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 auto pos = line.find(' '); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 auto it = list.find(line.substr(0, pos)); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
361 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
362 if (it != list.end()) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
363 it->second(pos == std::string::npos ? "" : line.substr(pos + 1)); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
364 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 #if defined(HAVE_LIBEDIT) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
367 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
368 const char* prompt(EditLine*) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
369 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
370 static const char* text = "> "; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
371 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 return text; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
375 std::string clean(std::string input) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
376 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
377 while (!input.empty() && (input.back() == '\n' || input.back() == '\r')) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 input.pop_back(); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
380 return input; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
381 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
382 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
383 std::vector<std::string> matches(const std::string& name) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
384 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
385 std::vector<std::string> result; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
386 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
387 for (const auto& pair : list) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
388 if (pair.first.compare(0U, name.size(), name) == 0U) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 result.push_back(pair.first); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
390 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
391 return result; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 unsigned char complete(EditLine* el, int) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
396 const auto* lf = el_line(el); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
397 const auto args = su::split(std::string(lf->buffer, lf->cursor), " "); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
398 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
399 if (args.size() == 0U) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 return CC_REFRESH; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
401 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
402 const auto found = matches(args[0]); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
403 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 if (found.size() != 1U) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 return CC_REFRESH; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
407 // Insert the missing text, e.g. onCom -> onCommand. |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
408 if (el_insertstr(el, &found[0].c_str()[args[0].size()]) < 0) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
409 return CC_ERROR; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
410 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
411 return CC_REFRESH; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
412 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
413 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
414 void run() |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
415 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
416 std::unique_ptr<EditLine, void (*)(EditLine*)> el( |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
417 el_init("irccd-test", stdin, stdout, stderr), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
418 el_end |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
419 ); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
420 std::unique_ptr<History, void (*)(History*)> hist( |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
421 history_init(), |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
422 history_end |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
423 ); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
424 HistEvent hev; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
425 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
426 history(hist.get(), &hev, H_SETSIZE, 1024); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
427 el_set(el.get(), EL_EDITOR, "emacs"); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
428 el_set(el.get(), EL_PROMPT, prompt); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
429 el_set(el.get(), EL_HIST, history, hist.get()); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
430 el_set(el.get(), EL_ADDFN, "ed-complete", "Complete command", complete); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
431 el_set(el.get(), EL_BIND, "^I", "ed-complete", nullptr); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
432 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
433 const char* s; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
434 int size; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
435 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
436 while ((s = el_gets(el.get(), &size)) && size >= 0) { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
437 if (size > 0) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
438 history(hist.get(), &hev, H_ENTER, s); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
439 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
440 exec(clean(s)); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
441 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
442 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
443 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
444 #else |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
445 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
446 void run() |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
447 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
448 std::string line; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
449 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
450 for (;;) { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
451 std::cout << "> "; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
452 std::getline(std::cin, line); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
453 exec(line); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
454 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
455 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
456 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
457 #endif |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
458 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
459 void load_plugins(int argc, char** argv) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
460 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
461 if (argc <= 0) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
462 usage(); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
463 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
464 daemon->plugins().load("test", boost::filesystem::exists(argv[0]) ? argv[0] : ""); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
465 plugin = daemon->plugins().get("test"); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
466 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
467 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
468 void load_options(int& argc, char**& argv) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
469 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
470 const option::options def{ |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
471 { "-c", true }, |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
472 { "--config", true } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
473 }; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
474 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
475 auto result = option::read(argc, argv, def); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
476 auto it = result.find("-c"); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
477 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
478 if (it == result.end()) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
479 it = result.find("--config"); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
480 if (it != result.end()) { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
481 try { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
482 daemon->set_config(it->second); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
483 } catch (const std::exception& ex) { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
484 throw std::runtime_error(su::sprintf("%s: %s", it->second, ex.what())); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
485 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
486 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
487 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
488 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
489 void load(int argc, char** argv) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
490 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
491 daemon = std::make_unique<irccd>(io); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
492 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
493 #if defined(HAVE_JS) |
621
1afefb4ffcf8
Irccd: add js_plugin_loader::defaults, closes #758
David Demelier <markand@malikania.fr>
parents:
620
diff
changeset
|
494 daemon->plugins().add_loader(js_plugin_loader::defaults(*daemon)); |
620
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
495 #endif |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
496 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
497 load_options(argc, argv); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
498 load_plugins(argc, argv); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
499 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
500 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
501 } // !namespace |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
502 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
503 } // !irccd |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
504 |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
505 int main(int argc, char** argv) |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
506 { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
507 try { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
508 irccd::load(--argc, ++argv); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
509 irccd::run(); |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
510 } catch (const std::exception& ex) { |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
511 std::cerr << "abort: " << ex.what() << std::endl; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
512 return 1; |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
513 } |
c79ae2987955
Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
514 } |