6#include "proto/main.pb.h"
7#include "protocol/jsonl_server.h"
9#include "net/ethernet.h"
10#include "protocol/protocol.h"
11#include "utils/logging.h"
13void msg::ApplicationServer::begin() {
14 server.begin(net::StartupConfig::get().jsonl_port);
18void msg::ApplicationServer::_accept_clients() {
19 net::EthernetClient client_socket = server.accept();
21 if (!client_socket)
return;
22 auto remote_ip = client_socket.remoteIP();
27 if (clients.size() == net::StartupConfig::get().max_connections) {
28 LOG5(
"Cannot accept client from ", remote_ip,
" because maximum number of connections (",
29 net::StartupConfig::get().max_connections,
") already reached.");
38 auto socket = std::make_shared<net::EthernetClient>(std::move(client_socket));
40 LOG4(
"Client ",
static_cast<unsigned>(clients.size()),
" connected from ", remote_ip);
41 auto& client = clients.emplace_back(ApplicationClient{
43 .transport = transport::Transport(
44 std::make_shared<transport::DelimitedInputStream<std::shared_ptr<Client>>>(socket),
45 std::make_shared<transport::DelimitedMessageOutputStream<std::shared_ptr<Client>>>(socket),
46 std::make_shared<transport::DelimitedMessageOutputStream<std::shared_ptr<Client>>>(socket),
51 client.user_context.set_remote_identifier(net::auth::RemoteIdentifier{remote_ip});
55void msg::ApplicationServer::_handle_clients() {
58 for (
auto it = clients.begin(); it != clients.end(); ++it) {
60 auto& socket = client.socket;
62 if (socket->connected()) {
63 if (socket->available() > 0) {
64 Broker::get().process(client.transport);
72 LOG3(
"Client was ", client.user_context,
", disconnected");
81void msg::ApplicationServer::loop() {