From d96c27220ad100b61332a0ac91bdb0300ef7e3be Mon Sep 17 00:00:00 2001 From: auth Date: Tue, 30 Jun 2020 23:31:36 +0200 Subject: Added json implementation for packets. Added useful operators for packet and server class for easier access. --- client/src/client/packet.h | 30 ++++++++++++------------------ client/src/main.cpp | 5 +++-- 2 files changed, 15 insertions(+), 20 deletions(-) (limited to 'client/src') diff --git a/client/src/client/packet.h b/client/src/client/packet.h index d1b7001..39b17de 100644 --- a/client/src/client/packet.h +++ b/client/src/client/packet.h @@ -1,15 +1,16 @@ #pragma once #include "enc.h" +#include + namespace tcp { constexpr size_t session_id_len = 10; -constexpr size_t message_len = 256 + session_id_len; +constexpr size_t message_len = 1024; enum packet_type : int { write = 0, read }; struct packet_t { std::string message; - char action; std::string session_id; int id; @@ -19,29 +20,21 @@ struct packet_t { if (type == read) { ++id; - if (msg.size() < session_id_len) { - io::logger->error("packet message invalid!"); - return; - } - message = msg; enc::decrypt_message(message); - session_id = message.substr(0, session_id_len); + auto json = nlohmann::json::parse(message); + message = json["message"]; + session_id = json["session_id"]; - action = message[session_id_len]; - message = message.substr(session_id_len); } else { - session_id = session; + nlohmann::json json; + json["session_id"] = session; + json["message"] = msg.data(); - message = fmt::format("{}{}", session_id, msg); + message = json.dump(); + session_id = session; - if (msg.size() > message_len) { - io::logger->error("packet message exceeds limit"); - message.clear(); - session_id.clear(); - return; - } enc::encrypt_message(message); } } @@ -52,5 +45,6 @@ struct packet_t { } operator bool() const { return !message.empty() && !session_id.empty(); } + auto &operator()() { return message; } }; }; // namespace tcp diff --git a/client/src/main.cpp b/client/src/main.cpp index 220afd6..c932b44 100644 --- a/client/src/main.cpp +++ b/client/src/main.cpp @@ -14,20 +14,21 @@ int main(int argc, char* argv[]) { client.receive_event.add([&](tcp::packet_t& packet) { if (!packet) return; + auto message = packet(); // first packet is the session id and current version if (packet.id == 1) { client.session_id = packet.session_id; tcp::version_t v{0, 1, 0}; auto version = fmt::format("{}.{}.{}", v.major, v.minor, v.patch); - if(version != packet.message) { + if(version != message) { io::logger->error("please update your client"); client.shutdown(); } return; } - io::logger->info("{}:{}->{}", packet.id, packet.session_id, packet.message); + io::logger->info("{}:{}->{}", packet.id, packet.session_id, message); }); while (client) { -- cgit v1.2.3