diff options
Diffstat (limited to 'include/net/conn.hpp')
| -rw-r--r-- | include/net/conn.hpp | 129 |
1 files changed, 66 insertions, 63 deletions
diff --git a/include/net/conn.hpp b/include/net/conn.hpp index b69dac6..6569973 100644 --- a/include/net/conn.hpp +++ b/include/net/conn.hpp @@ -16,9 +16,9 @@ class conn { sockaddr_in conn_addr; socklen_t conn_addr_size; - using handler_list = std::vector<std::function<bool(std::span<uint8_t>)>>; - std::array<handler_list, 256> handlers; - std::map<uint16_t, handler_list> netmodule_handlers; + using handler_list = std::vector<std::function<bool(std::span<uint8_t>)>>; + std::array<handler_list, 256> handlers; + std::map<uint16_t, handler_list> netmodule_handlers; private: packet::packet_header read_header() @@ -29,14 +29,14 @@ private: recv(packet_size); recv(id); - return { id, packet_size - 3}; + return { id, packet_size - 3 }; } public: conn(int sock_fd, sockaddr_in conn_addr, socklen_t conn_addr_size) - : sock_fd(sock_fd) - , conn_addr(conn_addr) - , conn_addr_size(conn_addr_size) + : sock_fd(sock_fd) + , conn_addr(conn_addr) + , conn_addr_size(conn_addr_size) { } @@ -67,9 +67,9 @@ public: ssize_t recv(std::span<uint8_t> data) { - if (data.size_bytes() == 0) { - return 0; - } + if (data.size_bytes() == 0) { + return 0; + } auto bytes = ::recv(sock_fd, data.data(), data.size_bytes(), 0); if (bytes <= 0) { @@ -98,34 +98,36 @@ public: auto [id, len] = read_header(); assert(id == T::packet_id); - if(len > 0) { + if (len > 0) { std::vector<uint8_t> payload(len); recv(payload); decode_packet(payload, t); } } - template <packet::packet P, typename H> - void reg_handler(H h) { - handlers[P::packet_id].push_back([this, h](std::span<uint8_t> payload) { - P t; - if (payload.size() > 0) { - packet::decode_packet(payload, t); + template <packet::packet P, typename H> + void reg_handler(H h) + { + handlers[P::packet_id].push_back([this, h](std::span<uint8_t> payload) { + P t; + if (payload.size() > 0) { + packet::decode_packet(payload, t); } - return h(t); - }); - } - - template <packet::netmodule P, typename H> - void reg_handler(H h) { - netmodule_handlers[P::module_id].push_back([this, h](std::span<uint8_t> payload) { - P t; - if (payload.size() > 0) { - packet::decode_packet(payload, t); + return h(t); + }); + } + + template <packet::netmodule P, typename H> + void reg_handler(H h) + { + netmodule_handlers[P::module_id].push_back([this, h](std::span<uint8_t> payload) { + P t; + if (payload.size() > 0) { + packet::decode_packet(payload, t); } - return h(t); - }); - } + return h(t); + }); + } template <packet::packet T> void send_packet(T p) @@ -137,52 +139,53 @@ public: if (payload.size() > 0) { send(payload); } - } - - bool handle_netmodule(std::span<uint8_t> payload) { + } + + bool handle_netmodule(std::span<uint8_t> payload) + { uint16_t id; std::memcpy(&id, payload.data(), sizeof(id)); id = to_little(id); - if (netmodule_handlers[id].size() <= 0) { + if (netmodule_handlers[id].size() <= 0) { // currently i won't bother implementing netmodules // FIXME: return false - return true; - } - - for (auto &h : handlers[id]) { - if (h(payload.subspan(2)) == true) { - return false; - } - } - return true; + return true; + } + + for (auto& h : handlers[id]) { + if (h(payload.subspan(2)) == true) { + return false; + } + } + return true; } - bool handle() { - auto [id, len] = read_header(); - if (id == 0) { - return false; - } + bool handle() + { + auto [id, len] = read_header(); + if (id == 0) { + return false; + } - std::vector<uint8_t> payload(len); - recv(payload); + std::vector<uint8_t> payload(len); + recv(payload); - //got netmodule - if (id == 82) { + // got netmodule + if (id == 82) { return handle_netmodule(payload); } - if (handlers[id].size() <= 0) { - return false; - } - - for (auto &h : handlers[id]) { - if (h(payload) == true) { - break; - } - } - return true; - } + if (handlers[id].size() <= 0) { + return false; + } + for (auto& h : handlers[id]) { + if (h(payload) == true) { + break; + } + } + return true; + } }; }
\ No newline at end of file |
