This commit is contained in:
MarcEricMartel
2023-10-29 14:54:36 -04:00
parent 0b07d46dba
commit b54f8c31e5
9 changed files with 56 additions and 71 deletions

View File

@@ -127,17 +127,16 @@ int Server::Ready() {
str.append(inet_ntop(AF_INET, &sockad.sin_addr, m_buf.ptr, m_buf.len)).append(": ").append(std::to_string(sockad.sin_port));
if (recv(sock, m_buf.ptr, m_buf.len, 0) > 0) {
LoginInfo* log;
PlayerInfo play;
Packet pck = getPack(&m_buf);
if (pck.type != PACKET_TYPE::LOGINF) {
Log("Paquet invalide.", true, false);
if (pck.type != PACKET_TYPE::ERR)
emptyPack(pck);
netprot::emptyPack(pck);
continue; // Passer au prochain appel si c'est pas un LoginInfo ou un LoginInfo invalide qui rentre.
}
log = (LoginInfo*)pck.ptr;
LoginInfo* log = (LoginInfo*)pck.ptr;
log->sid = getUniqueId();
log->tid = 0; // TODO: À changer si on implemente un mode en equipe.
@@ -155,14 +154,16 @@ int Server::Ready() {
play.tid = log->tid;
sendPack<GameInfo>(sock, &m_game, &m_buf.ptr, &m_buf.len);
Connection* conn = new Connection(sock, sockad, *log, play);
std::unique_ptr<Connection> conn = std::make_unique<Connection>(sock, sockad, *log, play);
for (auto& [key, player] : m_players) {
sendPack<PlayerInfo>(player->getSock(), &play, &m_buf); // Envoyer les infos de joueur distant aux joueurs d<>j<EFBFBD> connect<63>s
sendPack<PlayerInfo>(sock, player->getInfo(), &m_buf); // et envoyer les infos des joueurs distants au nouveau joueur.
}
m_players[log->sid] = conn;
m_players[log->sid] = std::move(conn);
delete log;
if (++nbrconn >= nbrjoueurs)
readystart = true;
@@ -179,12 +180,15 @@ void Server::Run() {
Log("Debut de la partie...", false, false);
for (auto& [key, conn]: m_players) { // Creation des instances de joueurs et premier sync.
conn->player = new Player(Vector3f(8.5f, CHUNK_SIZE_Y + 1.8f, 8.5f));
Player *player = conn->player;
m_world = std::make_unique<World>();
m_world->SetSeed(m_game.seed);
m_world->BuildWorld();
for (auto& [key, conn] : m_players) { // Creation des instances de joueurs et premier sync.
conn->player = std::make_unique<Player>(Vector3f(8.5f, CHUNK_SIZE_Y + 1.8f, 8.5f));
Sync sync;
sync.position = player->GetPosition();
sync.hp = player->GetHP();
sync.position = conn->player->GetPosition();
sync.hp = conn->player->GetHP();
sync.sid = key;
sync.ammo = 0;
sync.timestamp = 0;
@@ -197,56 +201,25 @@ void Server::Run() {
Packet pck = getPack(&m_buf);
switch (pck.type) {
using enum netprot::PACKET_TYPE;
case ERR:
std::cout << "ERROR!" << std::endl;
break;
case INPUT:
std::cout << "INPUT!" << std::endl;
break;
case OUTPUT:
std::cout << "OUTPUT!" << std::endl;
break;
case SYNC:
std::cout << "SYNC!" << std::endl;
break;
case TEAMINF:
std::cout << "TEAMINF!" << std::endl;
break;
case SELFINF:
std::cout << "SELFINF!" << std::endl;
break;
case PLAYINF:
std::cout << "PLAYINF!" << std::endl;
break;
case LOGINF:
std::cout << "LOGINF!" << std::endl;
break;
case CHUNKMOD:
std::cout << "CHUNKMOD!" << std::endl;
break;
case PLAYERMOD:
std::cout << "PLAYERMOD!" << std::endl;
break;
case PICKUPMOD:
std::cout << "PICKUPMOD!" << std::endl;
break;
case GAMEINFO:
std::cout << "GAMEINFO!" << std::endl;
break;
case ENDINFO:
std::cout << "ENDINFO!" << std::endl;
break;
case CHAT:
std::cout << "CHAT!" << std::endl;
break;
case ERRLOG:
std::cout << "ERRLOG!" << std::endl;
break;
case LAST_PACK:
std::cout << "wtf?!" << std::endl;
break;
case ERR: std::puts("ERROR!"); break;
case INPUT: std::puts("INPUT!"); break;
case OUTPUT: std::puts("OUTPUT!"); break;
case SYNC: std::puts("SYNC!"); break;
case TEAMINF: std::puts("TEAMINF!"); break;
case SELFINF: std::puts("SELFINF!"); break;
case PLAYINF: std::puts("PLAYINF!"); break;
case LOGINF: std::puts("LOGINF!"); break;
case CHUNKMOD: std::puts("CHUNKMOD!"); break;
case PLAYERMOD: std::puts("PLAYERMOD!"); break;
case PICKUPMOD: std::puts("PICKUPMOD!"); break;
case GAMEINFO: std::puts("GAMEINFO!"); break;
case ENDINFO: std::puts("ENDINFO!"); break;
case CHAT: std::puts("CHAT!"); break;
case ERRLOG: std::puts("ERRLOG!"); break;
case LAST_PACK: [[falltrough]];
default: std::puts("wtf?!"); break;
}
emptyPack(pck);
netprot::emptyPack(pck);
}
}
}
@@ -290,7 +263,6 @@ void Server::Log(std::string str, bool is_error = false, bool is_fatal = false)
if (m_sock_tcp)
closesocket(m_sock_tcp);
for (const auto& [key, player] : m_players) {
delete player->player;
closesocket(player->getSock());
}
m_players.clear();
@@ -305,7 +277,7 @@ void Server::buildIdList(size_t size) {
std::set<uint64_t> lst;
srand(time(NULL));
do lst.insert(((uint64_t)rand() << 32 | rand())); // EIGHT SIX SEVENFIVE THREE AUGHT NIIIIIIiIIiiIiINE!
do lst.insert(((uint64_t)rand() << 32 | rand()));
while (lst.size() < size);
m_ids = std::vector<uint64_t>(lst.begin(), lst.end());