annotate irccd-test/main.cpp @ 620:c79ae2987955

Irccd: create a brand new irccd-test executable, closes #569 @3h
author David Demelier <markand@malikania.fr>
date Thu, 21 Dec 2017 21:55:57 +0100
parents
children 1afefb4ffcf8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 *
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2017 David Demelier <markand@malikania.fr>
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>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39 #include <irccd/daemon/plugin_service.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
40 #include <irccd/daemon/server_service.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
41
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
42 #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
43
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44 #if defined(HAVE_JS)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 # include <irccd/js/directory_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 # include <irccd/js/elapsed_timer_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47 # include <irccd/js/file_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 # include <irccd/js/irccd_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 # 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
50 # include <irccd/js/logger_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 # include <irccd/js/plugin_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52 # include <irccd/js/server_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 # include <irccd/js/system_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 # include <irccd/js/timer_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55 # include <irccd/js/unicode_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 # include <irccd/js/util_jsapi.hpp>
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57 #endif
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59 namespace irccd {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 namespace su = string_util;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 namespace {
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 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
66
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 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
68 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
69
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
70 void usage()
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 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
73 std::exit(1);
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
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
76 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
77 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
78 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
79
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
80 if (name.empty())
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
81 name = "test";
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 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
84
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
85 if (!s) {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
86 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
87 daemon->servers().add(s);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
88 }
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 return s;
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
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
93 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
94 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
95 if (index >= args.size())
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
96 return "";
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 return args[index];
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
99 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
100
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
101 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
102 * 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
103 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
104 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
105 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 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
107
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
108 plugin->on_command(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
109 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
110 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
111 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
112 get_arg(args, 3)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
113 });
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 * onConnect server
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_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
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_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
124 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
125
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
126 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
127 * 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
128 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
129 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
130 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
131 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
132
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
133 plugin->on_invite(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
134 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
135 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
136 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
137 get_arg(args, 3),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
138 });
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
139 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
140
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
141 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
142 * onJoin server origin channel
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 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
145 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
146 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
147
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
148 plugin->on_join(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
149 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
150 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
151 get_arg(args, 2)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
152 });
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
153 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
154
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
155 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
156 * 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
157 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
158 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
159 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
160 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
161
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
162 plugin->on_kick(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
163 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
164 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
165 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
166 get_arg(args, 3),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
167 get_arg(args, 4),
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
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 * onLoad
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 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
175 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
176 plugin->on_load(*daemon);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
177 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
178
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
179 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
180 * 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
181 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
182 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
183 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
184 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
185
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
186 plugin->on_me(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
187 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
188 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
189 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
190 get_arg(args, 3)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
191 });
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
192 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
193
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
194 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
195 * 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
196 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
197 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
198 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
199 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
200
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
201 plugin->on_message(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
202 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
203 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
204 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
205 get_arg(args, 3)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
206 });
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
207 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
208
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
209 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
210 * 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
211 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
212 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
213 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
214 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
215
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
216 plugin->on_mode(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
217 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
218 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
219 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
220 get_arg(args, 3),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
221 get_arg(args, 4),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
222 get_arg(args, 5),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
223 get_arg(args, 6),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
224 });
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
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
227 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
228 * 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
229 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
230 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
231 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
232 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
233
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
234 names_event ev;
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 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
237 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
238
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
239 if (args.size() >= 3U)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
240 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
241
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
242 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
243 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
244
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
245 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
246 * onNick server origin nickname
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 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
249 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
250 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
251
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
252 plugin->on_nick(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
253 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
254 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
255 get_arg(args, 2)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
256 });
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
257 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
258
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
259 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
260 * 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
261 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
262 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
263 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
264 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
265
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
266 plugin->on_notice(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
267 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
268 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
269 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
270 get_arg(args, 3)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
271 });
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
272 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
273
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
274 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
275 * 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
276 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
277 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
278 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
279 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
280
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
281 plugin->on_part(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
282 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
283 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
284 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
285 get_arg(args, 3),
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
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 * onReload
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 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
293 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
294 plugin->on_reload(*daemon);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
295 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
296
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
297 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
298 * 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
299 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
300 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
301 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
302 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
303
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
304 plugin->on_topic(*daemon, {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
305 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
306 get_arg(args, 1),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
307 get_arg(args, 2),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
308 get_arg(args, 3)
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
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 * onUnload
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 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
316 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
317 plugin->on_unload(*daemon);
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
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
320 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
321 * 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
322 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
323 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
324 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
325 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
326
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
327 whois_event ev;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
328
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
329 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
330 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
331 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
332 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
333 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
334
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
335 if (args.size() >= 5)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
336 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
337
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
338 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
339 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
340
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
341 /*
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
342 * Table of user functions.
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
343 */
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
344 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
345 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
346
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
347 static const functions list{
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
348 { "onCommand", &(on_command) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
349 { "onConnect", &(on_connect) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
350 { "onInvite", &(on_invite) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
351 { "onJoin", &(on_join) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
352 { "onKick", &(on_kick) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
353 { "onLoad", &(on_load) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
354 { "onMe", &(on_me) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
355 { "onMessage", &(on_message) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
356 { "onMode", &(on_mode) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
357 { "onNames", &(on_names) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
358 { "onNick", &(on_nick) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
359 { "onNotice", &(on_notice) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
360 { "onPart", &(on_part) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
361 { "onReload", &(on_reload) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
362 { "onTopic", &(on_topic) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
363 { "onUnload", &(on_unload) },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
364 { "onWhois", &(on_whois) }
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
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
367 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
368 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
369 auto pos = line.find(' ');
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
370 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
371
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
372 if (it != list.end())
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
373 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
374 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
375
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
376 #if defined(HAVE_LIBEDIT)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
377
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
378 const char* prompt(EditLine*)
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 static const char* text = "> ";
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 return text;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
383 }
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::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
386 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
387 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
388 input.pop_back();
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
389
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
390 return input;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
391 }
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 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
394 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
395 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
396
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
397 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
398 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
399 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
400
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
401 return result;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
402 }
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 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
405 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
406 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
407 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
408
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
409 if (args.size() == 0U)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
410 return CC_REFRESH;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
411
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
412 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
413
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
414 if (found.size() != 1U)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
415 return CC_REFRESH;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
416
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
417 // 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
418 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
419 return CC_ERROR;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
420
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
421 return CC_REFRESH;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
422 }
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 void run()
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 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
427 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
428 el_end
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
429 );
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
430 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
431 history_init(),
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
432 history_end
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
433 );
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
434 HistEvent hev;
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 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
437 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
438 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
439 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
440 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
441 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
442
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
443 const char* s;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
444 int size;
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 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
447 if (size > 0)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
448 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
449
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
450 exec(clean(s));
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
451 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
452 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
453
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
454 #else
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 void run()
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
457 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
458 std::string line;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
459
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
460 for (;;) {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
461 std::cout << "> ";
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
462 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
463 exec(line);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
464 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
465 }
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 #endif
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
468
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
469 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
470 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
471 if (argc <= 0)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
472 usage();
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 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
475 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
476 }
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 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
479 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
480 const option::options def{
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
481 { "-c", true },
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
482 { "--config", true }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
483 };
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
484
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
485 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
486 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
487
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
488 if (it == result.end())
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
489 it = result.find("--config");
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
490 if (it != result.end()) {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
491 try {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
492 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
493 } 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
494 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
495 }
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 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
498
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
499 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
500 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
501 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
502
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
503 #if defined(HAVE_JS)
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
504 auto loader = std::make_unique<js_plugin_loader>(*daemon);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
505
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
506 loader->modules().push_back(std::make_unique<irccd_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
507 loader->modules().push_back(std::make_unique<directory_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
508 loader->modules().push_back(std::make_unique<elapsed_timer_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
509 loader->modules().push_back(std::make_unique<file_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
510 loader->modules().push_back(std::make_unique<logger_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
511 loader->modules().push_back(std::make_unique<plugin_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
512 loader->modules().push_back(std::make_unique<server_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
513 loader->modules().push_back(std::make_unique<system_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
514 loader->modules().push_back(std::make_unique<timer_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
515 loader->modules().push_back(std::make_unique<unicode_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
516 loader->modules().push_back(std::make_unique<util_jsapi>());
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
517
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
518 daemon->plugins().add_loader(std::move(loader));
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
519 #endif
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
520
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
521 load_options(argc, argv);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
522 load_plugins(argc, argv);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
523 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
524
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
525 } // !namespace
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
526
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
527 } // !irccd
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
528
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
529 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
530 {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
531 try {
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
532 irccd::load(--argc, ++argv);
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
533 irccd::run();
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
534 } 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
535 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
536 return 1;
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
537 }
c79ae2987955 Irccd: create a brand new irccd-test executable, closes #569 @3h
David Demelier <markand@malikania.fr>
parents:
diff changeset
538 }