summaryrefslogtreecommitdiff
path: root/include/net/conn.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/conn.hpp')
-rw-r--r--include/net/conn.hpp129
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