From 25a5cd75c637e78362862094911cfce05a5820a3 Mon Sep 17 00:00:00 2001 From: Anonymous275 Date: Sat, 2 May 2020 17:25:44 +0300 Subject: [PATCH] fixed a crash, added network codes --- src/Network/ClientHandler.cpp | 12 +++++------- src/Network/DataParser.cpp | 15 ++++++++++----- src/Network/Server.cpp | 2 -- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/Network/ClientHandler.cpp b/src/Network/ClientHandler.cpp index def72d2..cab3b4a 100644 --- a/src/Network/ClientHandler.cpp +++ b/src/Network/ClientHandler.cpp @@ -4,8 +4,7 @@ #include #include "enet.hpp" -#include -#include +#include #include "../logger.h" #include "../Settings.hpp" @@ -14,24 +13,24 @@ void Respond(const std::string& MSG, ENetPeer*peer){ enet_peer_send(peer, 0, enet_packet_create(MSG.c_str(), MSG.length() + 1, ENET_PACKET_FLAG_RELIABLE)); } -void SendToAll(ENetHost *server, ENetPeer*peer,const std::string& Data, bool All, bool Reliable){ +void SendToAll(ENetHost *server, ENetPeer*peer,const std::string& Data, bool All, bool Rel){ //std::cout << "Sending Code " << Data.at(0) << " length:" << Data.length() << " to all with the self switch : " << All << std::endl; for (int i = 0; i < server->connectedPeers; i++) { if (All || &server->peers[i] != peer) { //reliable is 1 unreliable is 8 - enet_peer_send(&server->peers[i], 0, enet_packet_create(Data.c_str(),Data.length()+1,Reliable?1:8)); + enet_peer_send(&server->peers[i], 0, enet_packet_create(Data.c_str(),Data.length()+1,Rel?1:8)); enet_host_flush(server); } } } -void UpdatePlayers(ENetHost *server,ENetPeer*peer){ +void UpdatePlayers(ENetHost *server, ENetPeer*peer){ std::string Packet = "Ss" + std::to_string(server->connectedPeers)+"/"+std::to_string(MaxPlayers) + ":"; for (int i = 0; i < server->connectedPeers; i++) { ENetPeer*SPeer = &server->peers[i]; Packet += SPeer->Name + ","; } Packet = Packet.substr(0,Packet.length()-1); - SendToAll(server,peer,Packet,true,true); + SendToAll(server,peer, Packet,true,true); } void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed){ @@ -40,7 +39,6 @@ void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed){ if(Timed)Packet = "L"+peer->Name+" Timed out!"; else Packet = "L"+peer->Name+" Left the server!"; SendToAll(server,peer, Packet,false,true); - UpdatePlayers(server,peer); Packet.clear(); peer->DID.clear(); peer->Name.clear(); diff --git a/src/Network/DataParser.cpp b/src/Network/DataParser.cpp index c497e4d..2d8a49f 100644 --- a/src/Network/DataParser.cpp +++ b/src/Network/DataParser.cpp @@ -13,7 +13,7 @@ void SendToAll(ENetHost *server, ENetPeer*peer,const std::string& Data,bool All, bool Reliable); std::string HTTP_REQUEST(const std::string& IP,int port); void Respond(const std::string& MSG, ENetPeer*peer); -void UpdatePlayers(ENetHost *server,ENetPeer*peer); +void UpdatePlayers(ENetHost *server, ENetPeer*peer); void FindAndSync(ENetPeer*peer,ENetHost*server,int VehID){ ENetPeer*ENetClient; @@ -81,9 +81,7 @@ void HTTP(ENetPeer*peer){ if(!a.empty()){ int pos = a.find('"'); peer->Role = a.substr(pos+1,a.find('"',pos+1)-2); - if(Debug){ - debug("ROLE -> " + peer->Role + " ID -> " + peer->DID); - } + if(Debug)debug("ROLE -> " + peer->Role + " ID -> " + peer->DID); } } } @@ -95,12 +93,14 @@ void GrabRole(ENetPeer*peer){ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){ std::string Packet = (char*)packet->data; + if(Packet.empty())return; if(Packet.find("TEST")!=std::string::npos)SyncVehicles(server,peer); char Code = Packet.at(0),SubCode = 0; if(Packet.length() > 1)SubCode = Packet.at(1); switch (Code) { case 'p': Respond("p",peer); + UpdatePlayers(server,peer); return; case 'N': if(SubCode == 'R'){ @@ -108,7 +108,6 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){ peer->DID = Packet.substr(Packet.find(':')+1); Respond("Sn"+peer->Name,peer); SendToAll(server,peer,"JWelcome "+peer->Name+"!",false,true); - UpdatePlayers(server,peer); GrabRole(peer); } std::cout << "Name : " << peer->Name << std::endl; @@ -122,6 +121,12 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){ case 'J': SendToAll(server,peer,Packet,false,true); break; + case 'C': + SendToAll(server,peer,Packet, true,true); + break; + case 'E': + SendToAll(server,peer,Packet, true,true); + break; } //V to Z if(Packet.length() > 1000){ diff --git a/src/Network/Server.cpp b/src/Network/Server.cpp index 7aefd94..2215373 100644 --- a/src/Network/Server.cpp +++ b/src/Network/Server.cpp @@ -91,9 +91,7 @@ void ServerMain(int Port, int MaxClients) { error("An error occurred while trying to create a server host."); return; } - info("Waiting for clients on port "+to_string(Port)+"..."); - while (true) { host_server(server); }