Moving packet handling to Packet class

This commit is contained in:
dawidg81 2026-03-10 17:33:23 +01:00
commit 7ac25f8cc0

View file

@ -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);
struct server_id_pack {
uint8_t packID;
uint8_t protVer;
string name;
string motd;
uint8_t utype;
} serverIDPack;
string name, motd;
char utype;
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;
name = "MCC Testing";
motd = "Welcome, " + player.username + "!";
if(player.isOP == true) utype = 0x64;
else utype = 0x00;
buffer[0] = serverIDPack.packID;
buffer[1] = serverIDPack.protVer;
writeMCString(buffer + 2, serverIDPack.name);
writeMCString(buffer + 66, serverIDPack.motd);
buffer[130] = serverIDPack.utype;
pack.sendServerId(clientSocket, name, motd, 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;