52 {
54
55 {
58 using Request = LegacyClient::Request;
59 using Response = LegacyClient::Response;
60 using LegacySocketAddress = LegacyClient::SocketAddress;
61
62 const LegacyClient legacyClient(
63 "legacy",
64 [](const std::shared_ptr<MasterRequest>& req) {
65 const std::string connectionName = req->getSocketContext()->getSocketConnection()->getConnectionName();
66
67 VLOG(1) << connectionName << ": OnRequestBegin";
68
69 req->set("Sec-WebSocket-Protocol", "subprotocol, echo");
70
71 req->upgrade(
72 "/ws",
73 "websocket",
74 [connectionName](bool success) {
75 VLOG(1) << connectionName << ": HTTP Upgrade (http -> websocket) start " << (success ? "success" : "failed");
76 },
77 [connectionName]([[maybe_unused]] const std::shared_ptr<Request>& req,
78 const std::shared_ptr<Response>& res,
79 [[maybe_unused]] bool success) {
80 VLOG(1) << connectionName << ": Upgrade success:";
81
82 VLOG(1) << connectionName << ": Requested: " << req->header("upgrade");
83 VLOG(1) << connectionName << ": Selected: " << res->get("upgrade");
84 },
85 [connectionName](const std::shared_ptr<Request>&, const std::string& message) {
86 VLOG(1) << connectionName << ": Request parse error: " << message;
87 });
88 },
89 []([[maybe_unused]] const std::shared_ptr<MasterRequest>& req) {
90 const std::string connectionName = req->getSocketContext()->getSocketConnection()->getConnectionName();
91
92 VLOG(1) << connectionName << ": OnRequestEnd";
93 });
94
95 legacyClient
97 VLOG(0) << "------------------- Legacy Client Init: " << connectEventReceiver;
98 })
99 .
connect([instanceName = legacyClient.getConfig().getInstanceName()](
const LegacySocketAddress& socketAddress,
101 switch (state) {
102 case core::socket::State::OK:
103 VLOG(1) << instanceName << " connected to '" << socketAddress.toString() << "'";
104 break;
105 case core::socket::State::DISABLED:
106 VLOG(1) << instanceName << " disabled";
107 break;
108 case core::socket::State::ERROR:
109 VLOG(1) << instanceName << " " << socketAddress.toString() << ": " << state.what();
110 break;
111 case core::socket::State::FATAL:
112 VLOG(1) << instanceName << " " << socketAddress.toString() << ": " << state.what();
113 break;
114 }
115 });
116
119 using Request = TlsClient::Request;
120 using Response = TlsClient::Response;
121 using TLSSocketAddress = TlsClient::SocketAddress;
122
123 const TlsClient tlsClient(
124 "tls",
125 [](const std::shared_ptr<MasterRequest>& req) {
126 const std::string connectionName = req->getSocketContext()->getSocketConnection()->getConnectionName();
127
128 VLOG(1) << connectionName << ": OnRequestBegin";
129
130 req->set("Sec-WebSocket-Protocol", "subprotocol, echo");
131
132 req->upgrade(
133 "/ws",
134 "websocket",
135 [connectionName](bool success) {
136 VLOG(1) << connectionName << ": HTTP Upgrade (http -> websocket) start " << (success ? "success" : "failed");
137 },
138 [connectionName]([[maybe_unused]] const std::shared_ptr<Request>& req,
139 [[maybe_unused]] const std::shared_ptr<Response>& res,
140 [[maybe_unused]] bool success) {
141 },
142 [connectionName](const std::shared_ptr<Request>&, const std::string& message) {
143 VLOG(1) << connectionName << ": Request parse error: " << message;
144 });
145 },
146 []([[maybe_unused]] const std::shared_ptr<MasterRequest>& req) {
147 const std::string connectionName = req->getSocketContext()->getSocketConnection()->getConnectionName();
148
149 VLOG(1) << connectionName << ": OnRequestEnd";
150 });
151
152 tlsClient
154 VLOG(0) << "------------------- TLS Client Init: " << connectEventReceiver;
155 })
156 .
connect([instanceName = tlsClient.getConfig().getInstanceName()](
const TLSSocketAddress& socketAddress,
158 switch (state) {
159 case core::socket::State::OK:
160 VLOG(1) << instanceName << " connected to '" << socketAddress.toString() << "'";
161 break;
162 case core::socket::State::DISABLED:
163 VLOG(1) << instanceName << " disabled";
164 break;
165 case core::socket::State::ERROR:
166 VLOG(1) << instanceName << " " << socketAddress.toString() << ": " << state.what();
167 break;
168 case core::socket::State::FATAL:
169 VLOG(1) << instanceName << " " << socketAddress.toString() << ": " << state.what();
170 break;
171 }
172 });
173 }
174
176}
static void init(int argc, char *argv[])
static int start(const utils::Timeval &timeOut={LONG_MAX, 0})
Client::Response Response
Client::MasterRequest MasterRequest
int connect(int sockfd, const sockaddr *addr, socklen_t addrlen)
web::http::client::Client< net::in::stream::legacy::SocketClient > Client
web::http::client::Client< net::in::stream::tls::SocketClient > Client