fixed a crash, added network codes

This commit is contained in:
Anonymous275 2020-05-02 17:25:44 +03:00
parent 851343eedb
commit 25a5cd75c6
3 changed files with 15 additions and 14 deletions

View File

@ -4,8 +4,7 @@
#include <string> #include <string>
#include "enet.hpp" #include "enet.hpp"
#include <fstream> #include <thread>
#include <iostream>
#include "../logger.h" #include "../logger.h"
#include "../Settings.hpp" #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)); 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; //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++) { for (int i = 0; i < server->connectedPeers; i++) {
if (All || &server->peers[i] != peer) { if (All || &server->peers[i] != peer) {
//reliable is 1 unreliable is 8 //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); 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) + ":"; std::string Packet = "Ss" + std::to_string(server->connectedPeers)+"/"+std::to_string(MaxPlayers) + ":";
for (int i = 0; i < server->connectedPeers; i++) { for (int i = 0; i < server->connectedPeers; i++) {
ENetPeer*SPeer = &server->peers[i]; ENetPeer*SPeer = &server->peers[i];
Packet += SPeer->Name + ","; Packet += SPeer->Name + ",";
} }
Packet = Packet.substr(0,Packet.length()-1); 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){ 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!"; if(Timed)Packet = "L"+peer->Name+" Timed out!";
else Packet = "L"+peer->Name+" Left the server!"; else Packet = "L"+peer->Name+" Left the server!";
SendToAll(server,peer, Packet,false,true); SendToAll(server,peer, Packet,false,true);
UpdatePlayers(server,peer);
Packet.clear(); Packet.clear();
peer->DID.clear(); peer->DID.clear();
peer->Name.clear(); peer->Name.clear();

View File

@ -13,7 +13,7 @@
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 Reliable);
std::string HTTP_REQUEST(const std::string& IP,int port); std::string HTTP_REQUEST(const std::string& IP,int port);
void Respond(const std::string& MSG, ENetPeer*peer); 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){ void FindAndSync(ENetPeer*peer,ENetHost*server,int VehID){
ENetPeer*ENetClient; ENetPeer*ENetClient;
@ -81,9 +81,7 @@ void HTTP(ENetPeer*peer){
if(!a.empty()){ if(!a.empty()){
int pos = a.find('"'); int pos = a.find('"');
peer->Role = a.substr(pos+1,a.find('"',pos+1)-2); peer->Role = a.substr(pos+1,a.find('"',pos+1)-2);
if(Debug){ if(Debug)debug("ROLE -> " + peer->Role + " ID -> " + peer->DID);
debug("ROLE -> " + peer->Role + " ID -> " + peer->DID);
}
} }
} }
} }
@ -95,12 +93,14 @@ void GrabRole(ENetPeer*peer){
void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
std::string Packet = (char*)packet->data; std::string Packet = (char*)packet->data;
if(Packet.empty())return;
if(Packet.find("TEST")!=std::string::npos)SyncVehicles(server,peer); if(Packet.find("TEST")!=std::string::npos)SyncVehicles(server,peer);
char Code = Packet.at(0),SubCode = 0; char Code = Packet.at(0),SubCode = 0;
if(Packet.length() > 1)SubCode = Packet.at(1); if(Packet.length() > 1)SubCode = Packet.at(1);
switch (Code) { switch (Code) {
case 'p': case 'p':
Respond("p",peer); Respond("p",peer);
UpdatePlayers(server,peer);
return; return;
case 'N': case 'N':
if(SubCode == 'R'){ if(SubCode == 'R'){
@ -108,7 +108,6 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
peer->DID = Packet.substr(Packet.find(':')+1); peer->DID = Packet.substr(Packet.find(':')+1);
Respond("Sn"+peer->Name,peer); Respond("Sn"+peer->Name,peer);
SendToAll(server,peer,"JWelcome "+peer->Name+"!",false,true); SendToAll(server,peer,"JWelcome "+peer->Name+"!",false,true);
UpdatePlayers(server,peer);
GrabRole(peer); GrabRole(peer);
} }
std::cout << "Name : " << peer->Name << std::endl; std::cout << "Name : " << peer->Name << std::endl;
@ -122,6 +121,12 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
case 'J': case 'J':
SendToAll(server,peer,Packet,false,true); SendToAll(server,peer,Packet,false,true);
break; break;
case 'C':
SendToAll(server,peer,Packet, true,true);
break;
case 'E':
SendToAll(server,peer,Packet, true,true);
break;
} }
//V to Z //V to Z
if(Packet.length() > 1000){ if(Packet.length() > 1000){

View File

@ -91,9 +91,7 @@ void ServerMain(int Port, int MaxClients) {
error("An error occurred while trying to create a server host."); error("An error occurred while trying to create a server host.");
return; return;
} }
info("Waiting for clients on port "+to_string(Port)+"..."); info("Waiting for clients on port "+to_string(Port)+"...");
while (true) { while (true) {
host_server(server); host_server(server);
} }