Handling server id

This commit is contained in:
dawidg81 2026-03-10 17:09:38 +01:00
commit 2bcf91a164

View file

@ -12,13 +12,20 @@ class Player {
public: public:
string username; string username;
string verKey; string verKey;
bool isOP;
Player(string uname, string verkey){ Player(string uname, string verkey, bool op){
username = uname; username = uname;
verKey = verkey; 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() { int main() {
log.raw("mcc v0.0.0"); log.raw("mcc v0.0.0");
Socket socket; Socket socket;
@ -38,7 +45,7 @@ int main() {
if(bytesRecv <= 0){ if(bytesRecv <= 0){
log.err("No bytes received"); log.err("No bytes received");
closesocket(clientSocket); closesocket(clientSocket);
return 1; continue;
} }
uint8_t packID = buffer[0]; uint8_t packID = buffer[0];
uint8_t protVer = buffer[1]; uint8_t protVer = buffer[1];
@ -47,13 +54,42 @@ int main() {
string verKey; verKey.assign(buffer + 66, 64); string verKey; verKey.assign(buffer + 66, 64);
uint8_t unused = buffer[130]; uint8_t unused = buffer[130];
Player player(username, verKey); Player player(username, verKey, false);
log.info(username + " connected"); log.info(username + " connected");
// send server identification (using the same buffer) // send server identification (using the same buffer)
for(int i=0; i < sizeof(buffer); i++){ for(int i=0; i < sizeof(buffer); i++){
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; return 0;