From 2bcf91a164ff152922b50d3f449e79db8fba1b34 Mon Sep 17 00:00:00 2001 From: dawidg81 Date: Tue, 10 Mar 2026 17:09:38 +0100 Subject: [PATCH 1/2] Handling server id --- src/main.cpp | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 54c00d7..26eb8f4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -12,13 +12,20 @@ class Player { public: string username; string verKey; + bool isOP; - Player(string uname, string verkey){ + Player(string uname, string verkey, bool op){ username = uname; verKey = verkey; + isOP = op; } }; +auto writeMCString = [](char* buf, const string& str){ + memset(buf, ' ', 64); + memcpy(buf, str.c_str(), min(str.size(), (size_t)64)); +}; + int main() { log.raw("mcc v0.0.0"); Socket socket; @@ -38,7 +45,7 @@ int main() { if(bytesRecv <= 0){ log.err("No bytes received"); closesocket(clientSocket); - return 1; + continue; } uint8_t packID = buffer[0]; uint8_t protVer = buffer[1]; @@ -47,13 +54,42 @@ int main() { string verKey; verKey.assign(buffer + 66, 64); uint8_t unused = buffer[130]; - Player player(username, verKey); + Player player(username, verKey, false); + log.info(username + " connected"); // send server identification (using the same buffer) for(int i=0; i < sizeof(buffer); i++){ buffer[i] = {}; } + + struct server_id_pack { + uint8_t packID; + uint8_t protVer; + string name; + string motd; + uint8_t utype; + } serverIDPack; + + serverIDPack.packID = 0x00; + serverIDPack.protVer = 0x07; + serverIDPack.name = "MCC Testing"; + serverIDPack.motd = "Hello, " + player.username + "!"; + if(player.isOP == true) serverIDPack.utype = 0x64; + else serverIDPack.utype = 0x00; + + buffer[0] = serverIDPack.packID; + buffer[1] = serverIDPack.protVer; + writeMCString(buffer + 2, serverIDPack.name); + writeMCString(buffer + 66, serverIDPack.motd); + buffer[130] = serverIDPack.utype; + + int bytesSent = send(clientSocket, buffer, sizeof(buffer), 0); + if(bytesSent != sizeof(buffer)){ + log.err("Failed to send buffer"); + closesocket(clientSocket); + continue; + } } return 0; From 7ac25f8cc07556c62437558617eacf90804abef6 Mon Sep 17 00:00:00 2001 From: dawidg81 Date: Tue, 10 Mar 2026 17:33:23 +0100 Subject: [PATCH 2/2] Moving packet handling to Packet class --- src/main.cpp | 89 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 31 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 26eb8f4..18c569c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,11 @@ using namespace std; Logger log; +auto writeMCString = [](char* buf, const string& str){ + memset(buf, ' ', 64); + memcpy(buf, str.c_str(), min(str.size(), (size_t)64)); +}; + class Player { public: string username; @@ -21,11 +26,46 @@ public: } }; -auto writeMCString = [](char* buf, const string& str){ - memset(buf, ' ', 64); - memcpy(buf, str.c_str(), min(str.size(), (size_t)64)); +class Packet { +public: + void recvPlayerId(SOCKET socket){ + char buffer[131] = {}; + int bytesRecv = recv(socket, buffer, sizeof(buffer), 0); + + if(bytesRecv <= 0){ + log.err("No bytes received"); + closesocket(socket); + } + + uint8_t packID = buffer[0]; + uint8_t protVer = buffer[1]; + string username; username.assign(buffer + 2, 64); + username.erase(username.find_first_of("\0 \t\r\n", 0, 6)); + string verKey; verKey.assign(buffer + 66, 64); + uint8_t unused = buffer[130]; + + log.info(username + " connected"); + } + + void sendServerId(SOCKET socket, string name, string motd, char utype){ + char buffer[131] = {}; + + buffer[0] = 0x00; + buffer[1] = 0x07; + writeMCString(buffer + 2, name); + writeMCString(buffer + 66, motd); + buffer[130] = utype; + + int bytesSent = send(socket, buffer, sizeof(buffer), 0); + if(bytesSent != sizeof(buffer)){ + log.err("Failed to send buffer"); + closesocket(socket); + } + } }; +Packet pack; + int main() { log.raw("mcc v0.0.0"); Socket socket; @@ -39,6 +79,7 @@ int main() { if(clientSocket == INVALID_SOCKET) continue; // Receive player identification + /* char buffer[131] = {}; int bytesRecv = recv(clientSocket, buffer, sizeof(buffer), 0); @@ -47,6 +88,7 @@ int main() { closesocket(clientSocket); continue; } + uint8_t packID = buffer[0]; uint8_t protVer = buffer[1]; string username; username.assign(buffer + 2, 64); @@ -57,39 +99,24 @@ int main() { Player player(username, verKey, false); log.info(username + " connected"); + */ // send server identification (using the same buffer) - for(int i=0; i < sizeof(buffer); i++){ - buffer[i] = {}; - } + Player player(username, verKey, false); + + string name, motd; + char utype; - struct server_id_pack { - uint8_t packID; - uint8_t protVer; - string name; - string motd; - uint8_t utype; - } serverIDPack; + name = "MCC Testing"; + motd = "Welcome, " + player.username + "!"; + if(player.isOP == true) utype = 0x64; + else utype = 0x00; - serverIDPack.packID = 0x00; - serverIDPack.protVer = 0x07; - serverIDPack.name = "MCC Testing"; - serverIDPack.motd = "Hello, " + player.username + "!"; - if(player.isOP == true) serverIDPack.utype = 0x64; - else serverIDPack.utype = 0x00; + pack.sendServerId(clientSocket, name, motd, utype); - buffer[0] = serverIDPack.packID; - buffer[1] = serverIDPack.protVer; - writeMCString(buffer + 2, serverIDPack.name); - writeMCString(buffer + 66, serverIDPack.motd); - buffer[130] = serverIDPack.utype; - - int bytesSent = send(clientSocket, buffer, sizeof(buffer), 0); - if(bytesSent != sizeof(buffer)){ - log.err("Failed to send buffer"); - closesocket(clientSocket); - continue; - } + // Level initialization (just to debug server id packet) + char levelinitbuff = 0x02; + send(clientSocket, &levelinitbuff, sizeof(levelinitbuff), 0); } return 0;