aboutsummaryrefslogtreecommitdiff
path: root/client/src
diff options
context:
space:
mode:
authorauth <[email protected]>2020-06-30 23:31:36 +0200
committerauth <[email protected]>2020-06-30 23:31:36 +0200
commitd96c27220ad100b61332a0ac91bdb0300ef7e3be (patch)
tree3cd6289e6aa4c2a16621a2914ab68c2f723c6f00 /client/src
parentAdded json. (diff)
downloadloader-d96c27220ad100b61332a0ac91bdb0300ef7e3be.tar.xz
loader-d96c27220ad100b61332a0ac91bdb0300ef7e3be.zip
Added json implementation for packets.
Added useful operators for packet and server class for easier access.
Diffstat (limited to 'client/src')
-rw-r--r--client/src/client/packet.h30
-rw-r--r--client/src/main.cpp5
2 files changed, 15 insertions, 20 deletions
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 <json.hpp>
+
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) {