GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: src/network/NetworkManager.cpp Lines: 0 33 0.0 %
Date: 2022-10-28 19:38:43 Branches: 0 42 0.0 %

Line Branch Exec Source
1
#include "network/NetworkManager.hpp"
2
3
#include <iostream>
4
#include <filesystem>
5
6
namespace b = boost;
7
namespace ba = boost::asio;
8
namespace bal = boost::asio::local;
9
10
static void runIo(std::shared_ptr<ba::io_context> ioContext) {
11
    ba::io_service::work work(*ioContext);
12
    ioContext->run();
13
}
14
15
namespace blink1_control::network {
16
17
    NetworkManager::NetworkManager(std::string_view socketPath) :
18
        ioc(std::make_shared<ba::io_context>()),
19
        endpoint(socketPath),
20
        acceptor(*ioc, endpoint),
21
        ioThread(nullptr)
22
    {}
23
24
    NetworkManager::~NetworkManager() {
25
        stop();
26
        std::filesystem::remove(endpoint.path());
27
    }
28
29
    void NetworkManager::start() {
30
        ioc->restart();
31
        acceptor.listen();
32
        startAccept();
33
        ioThread = std::make_unique<boost::thread>(std::bind_front(&runIo, this->ioc));
34
    }
35
36
    void NetworkManager::stop() {
37
        acceptor.cancel();
38
        ioc->stop();
39
    }
40
41
    void NetworkManager::startAccept() {
42
        acceptor.async_accept(std::bind_front(&NetworkManager::acceptHandler, this));
43
    }
44
45
    void NetworkManager::acceptHandler(const b::system::error_code& error, bal::stream_protocol::socket peer) {
46
        if (error) {
47
48
            if (error.value() != b::system::errc::operation_canceled) {
49
                std::cout << "Error accepting connection: " << error.what() << "\n";
50
            }
51
52
            return;
53
        }
54
55
        std::cout << "Got connection\n";
56
        bal::stream_protocol::iostream clientIos(std::move(peer));
57
        std::string data;
58
        std::cout << "Outbound: \"Hello, World!\"\n";
59
        clientIos << "Hello, World!\n";
60
        std::getline(clientIos, data);
61
        std::cout << "Inbound:  " << data << "\n";
62
        std::cout << "Closing connection\n";
63
64
        startAccept();
65
    }
66
67
}