Moving packet handling to Packet class
This commit is contained in:
parent
2bcf91a164
commit
7ac25f8cc0
1 changed files with 60 additions and 33 deletions
89
src/main.cpp
89
src/main.cpp
|
|
@ -8,6 +8,11 @@ using namespace std;
|
||||||
|
|
||||||
Logger log;
|
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 {
|
class Player {
|
||||||
public:
|
public:
|
||||||
string username;
|
string username;
|
||||||
|
|
@ -21,11 +26,46 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
auto writeMCString = [](char* buf, const string& str){
|
class Packet {
|
||||||
memset(buf, ' ', 64);
|
public:
|
||||||
memcpy(buf, str.c_str(), min(str.size(), (size_t)64));
|
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() {
|
int main() {
|
||||||
log.raw("mcc v0.0.0");
|
log.raw("mcc v0.0.0");
|
||||||
Socket socket;
|
Socket socket;
|
||||||
|
|
@ -39,6 +79,7 @@ int main() {
|
||||||
if(clientSocket == INVALID_SOCKET) continue;
|
if(clientSocket == INVALID_SOCKET) continue;
|
||||||
|
|
||||||
// Receive player identification
|
// Receive player identification
|
||||||
|
/*
|
||||||
char buffer[131] = {};
|
char buffer[131] = {};
|
||||||
int bytesRecv = recv(clientSocket, buffer, sizeof(buffer), 0);
|
int bytesRecv = recv(clientSocket, buffer, sizeof(buffer), 0);
|
||||||
|
|
||||||
|
|
@ -47,6 +88,7 @@ int main() {
|
||||||
closesocket(clientSocket);
|
closesocket(clientSocket);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t packID = buffer[0];
|
uint8_t packID = buffer[0];
|
||||||
uint8_t protVer = buffer[1];
|
uint8_t protVer = buffer[1];
|
||||||
string username; username.assign(buffer + 2, 64);
|
string username; username.assign(buffer + 2, 64);
|
||||||
|
|
@ -57,39 +99,24 @@ int main() {
|
||||||
Player player(username, verKey, false);
|
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++){
|
Player player(username, verKey, false);
|
||||||
buffer[i] = {};
|
|
||||||
}
|
string name, motd;
|
||||||
|
char utype;
|
||||||
|
|
||||||
struct server_id_pack {
|
name = "MCC Testing";
|
||||||
uint8_t packID;
|
motd = "Welcome, " + player.username + "!";
|
||||||
uint8_t protVer;
|
if(player.isOP == true) utype = 0x64;
|
||||||
string name;
|
else utype = 0x00;
|
||||||
string motd;
|
|
||||||
uint8_t utype;
|
|
||||||
} serverIDPack;
|
|
||||||
|
|
||||||
serverIDPack.packID = 0x00;
|
pack.sendServerId(clientSocket, name, motd, utype);
|
||||||
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;
|
// Level initialization (just to debug server id packet)
|
||||||
buffer[1] = serverIDPack.protVer;
|
char levelinitbuff = 0x02;
|
||||||
writeMCString(buffer + 2, serverIDPack.name);
|
send(clientSocket, &levelinitbuff, sizeof(levelinitbuff), 0);
|
||||||
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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue