Apollo 10.0
自动驾驶开放平台
server.cc
浏览该文件的文档.
1
8
9#include <signal.h>
10
11#include <cstdint>
12#include <functional>
13#include <memory>
14#include <utility>
15
16#include "boost/bind.hpp"
17#include "cyber/common/log.h"
18#include "gflags/gflags.h"
20
21DEFINE_int32(port, 9090, "tcp listen port");
22
24 : node(*node),
25 signals(io),
26 endpoint(boost::asio::ip::tcp::v4(), (uint16_t)FLAGS_port),
27 acceptor(io, endpoint),
28 socket(io) {
29 signals.add(SIGTERM);
30 signals.add(SIGINT);
31}
32
34
36 signals.async_wait(boost::bind(&Server::stop, shared_from_this(),
37 boost::asio::placeholders::error,
38 boost::asio::placeholders::signal_number));
39
40 begin_accept();
41
42 io.run();
43}
44
45void Server::stop(const boost::system::error_code& ec, int signal_number) {
46 if (ec) {
47 AERROR << "Error waiting on signals: " << ec.message();
48 } else {
49 AINFO << "Signal " << signal_number << " received, stopping server";
50 }
51 acceptor.close();
52 clients.stop_all();
53}
54
55void Server::begin_accept() {
56 acceptor.async_accept(socket,
57 boost::bind(&Server::end_accept, shared_from_this(),
58 boost::asio::placeholders::error));
59}
60
61void Server::end_accept(const boost::system::error_code& ec) {
62 if (!acceptor.is_open()) {
63 return;
64 }
65
66 if (ec) {
67 AERROR << "Error accepting connection: " << ec.message();
68 } else {
69 auto client = std::make_shared<Client>(&node, &clients, std::move(socket));
70 clients.start(client);
71 }
72
73 begin_accept();
74}
void stop_all()
Definition clients.cc:27
void start(std::shared_ptr< Client > client)
Definition clients.cc:17
Definition node.h:31
~Server()
Definition server.cc:33
Server(Node *node)
Definition server.cc:23
void run()
Definition server.cc:35
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42
DEFINE_int32(port, 9090, "tcp listen port")
Copyright (c) 2019 LG Electronics, Inc.