Line data Source code
1 : // Copyright (c) 2020-2021 Made to Order Software Corp.
2 : // All rights reserved
3 : //
4 : // https://snapwebsites.org/project/eventdispatcher
5 : // contact@m2osw.com
6 : //
7 : // This program is free software; you can redistribute it and/or modify
8 : // it under the terms of the GNU General Public License as published by
9 : // the Free Software Foundation; either version 2 of the License, or
10 : // (at your option) any later version.
11 : //
12 : // This program is distributed in the hope that it will be useful,
13 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 : // GNU General Public License for more details.
16 : //
17 : // You should have received a copy of the GNU General Public License
18 : // along with this program; if not, write to the Free Software
19 : // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 :
21 : // self
22 : //
23 : #include "eventdispatcher/logrotate_udp_messenger.h"
24 :
25 :
26 : // last include
27 : //
28 : #include <snapdev/poison.h>
29 :
30 :
31 :
32 : namespace ed
33 : {
34 :
35 :
36 :
37 : /** \brief The UDP server initialization.
38 : *
39 : * The UDP server creates a new UDP server to listen on incoming
40 : * messages over a UDP connection.
41 : *
42 : * This UDP implementation is used to listen to the LOG message specifically.
43 : * It is often that you want to restart the snaplogger and this can be used
44 : * as the way to do it. The UDP message can be sent using the ed-signal
45 : * command line tool:
46 : *
47 : * \code
48 : * ed-signal --server 127.0.0.1:1234 --message LOG --type udp
49 : * \endcode
50 : *
51 : * The reaction of the server is to restart the snaplogger as implemented in
52 : * the default dispatcher messages (see the messages.cpp for details).
53 : *
54 : * If you already have a UDP service in your application, you can simply
55 : * add the default dispatcher messages and the LOG message will automatically
56 : * be handled for you. No need to create yet another network connection.
57 : * We do so in this constructor like so:
58 : *
59 : * \code
60 : * f_dispatcher->add_communicator_commands();
61 : * \endcode
62 : *
63 : * \param[in] addr The address/port to listen on. Most often it is the private
64 : * address (127.0.0.1).
65 : * \param[in] secret_code A secret code to verify in order to accept UDP
66 : * messages.
67 : */
68 0 : logrotate_udp_messenger::logrotate_udp_messenger(
69 : addr::addr const & address
70 0 : , std::string const & secret_code)
71 0 : : ed::udp_server_message_connection(address.to_ipv4or6_string(addr::addr::string_ip_t::STRING_IP_BRACKETS), address.get_port())
72 : , f_dispatcher(std::make_shared<ed::dispatcher<logrotate_udp_messenger>>(
73 : this
74 0 : , ed::dispatcher<logrotate_udp_messenger>::dispatcher_match::vector_t()))
75 : {
76 0 : set_name("logrotate_udp_messenger");
77 0 : set_secret_code(secret_code);
78 0 : f_dispatcher->add_communicator_commands();
79 : #ifdef _DEBUG
80 0 : f_dispatcher->set_trace();
81 : #endif
82 0 : set_dispatcher(f_dispatcher);
83 0 : }
84 :
85 :
86 : /** \brief The logrotate messenger destructor.
87 : *
88 : * This function is here because the logrotate_udp_messenger derives from
89 : * classes that have virtual functions and the destructor of such classes
90 : * have to be defined virtual.
91 : */
92 0 : logrotate_udp_messenger::~logrotate_udp_messenger()
93 : {
94 0 : }
95 :
96 :
97 : /** \brief Implement a send message for it is required.
98 : *
99 : * This function does nothing. It has to be defined because one of the
100 : * dependencies of this class has a pure virtual function named send_message().
101 : *
102 : * In a later implementation we may change this implementation.
103 : *
104 : * \param[in] msg The message to be sent (ignored).
105 : * \param[in] cache Whether to cache the message if it can't immediately be
106 : * sent (ignored).
107 : *
108 : * \return Always returns true (as if the message was sent successfully).
109 : */
110 0 : bool logrotate_udp_messenger::send_message(ed::message const & msg, bool cache)
111 : {
112 0 : snap::NOT_USED(msg, cache);
113 0 : return true;
114 : }
115 :
116 :
117 6 : } // namespace ed
118 : // vim: ts=4 sw=4 et
|