Fixed timeout, added vehicle data tracker

This commit is contained in:
Anonymous275 2020-05-01 18:42:17 +03:00
parent a85da1e05e
commit 851343eedb
4 changed files with 58 additions and 12 deletions

View File

@ -24,10 +24,23 @@ void SendToAll(ENetHost *server, ENetPeer*peer,const std::string& Data, bool All
}
}
}
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);
}
void OnDisconnect(ENetHost *server,ENetPeer*peer){
void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed){
std::string Packet = "Od:" + std::to_string(peer->serverVehicleID[0]);
SendToAll(server,peer, Packet,false,true);
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();
@ -35,9 +48,9 @@ void OnDisconnect(ENetHost *server,ENetPeer*peer){
}
void OnConnect(ENetHost *server,ENetPeer*peer){
enet_peer_send(peer, 0, enet_packet_create ("NR", 3, ENET_PACKET_FLAG_RELIABLE));
Respond("NR",peer);
peer->serverVehicleID[0] = FindID(server,peer); ///TODO: WHAT IF IT IS THE SECOND VEHICLE?
std::string ID = "P" + std::to_string(peer->serverVehicleID[0]);
enet_peer_send(peer, 0, enet_packet_create (ID.c_str(), ID.length()+1, ENET_PACKET_FLAG_RELIABLE));
Respond(ID,peer);
if(Debug)debug(peer->Name + " ID : " + std::to_string(peer->serverVehicleID[0]));
}

View File

@ -13,11 +13,25 @@
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 FindAndSync(ENetPeer*peer,ENetHost*server,int VehID){
ENetPeer*ENetClient;
for (int i = 0; i < server->connectedPeers; i++) {
ENetClient = &server->peers[i];
if (ENetClient != peer){
if(ENetClient->serverVehicleID[0] == VehID){
Respond(ENetClient->VehicleData,peer);
}
}
}
}
void VehicleParser(std::string Packet,ENetPeer*peer,ENetHost*server){
char Code = Packet.at(1);
int ID = -1;
std::string Data = Packet.substr(3);
switch(Code){ //Spawned Destroyed Switched/Moved Reset
switch(Code){ //Spawned Destroyed Switched/Moved NotFound Reset
case 's':
if(Data.at(0) == '0'){
Packet = "Os:"+peer->Role+":"+peer->Name+":"+std::to_string(peer->serverVehicleID[0])+Packet.substr(4);
@ -26,11 +40,22 @@ void VehicleParser(std::string Packet,ENetPeer*peer,ENetHost*server){
SendToAll(server,peer,Packet,true,true);
break;
case 'd':
if(Packet.substr(3).find_first_not_of("0123456789") == std::string::npos){
ID = stoi(Packet.substr(3));
}
peer->VehicleData.clear();
SendToAll(server,peer,Packet,true,true);
if(ID != -1 && ID == peer->serverVehicleID[0]){
SendToAll(server,peer,Packet,true,true);
}
break;
case 'm':
break;
case 'n':
if(Packet.substr(3).find_first_not_of("0123456789") == std::string::npos){
ID = stoi(Packet.substr(3));
}
FindAndSync(peer,server,ID);
break;
case 'r':
SendToAll(server,peer,Packet,false,true);
break;
@ -56,7 +81,9 @@ 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);
if(Debug){
debug("ROLE -> " + peer->Role + " ID -> " + peer->DID);
}
}
}
}
@ -68,7 +95,7 @@ void GrabRole(ENetPeer*peer){
void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
std::string Packet = (char*)packet->data;
if(Packet == "TEST")SyncVehicles(server,peer);
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) {
@ -79,6 +106,9 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
if(SubCode == 'R'){
peer->Name = Packet.substr(2,Packet.find(':')-2);
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;
@ -89,6 +119,9 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
}
VehicleParser(Packet,peer,server);
return;
case 'J':
SendToAll(server,peer,Packet,false,true);
break;
}
//V to Z
if(Packet.length() > 1000){

View File

@ -10,7 +10,7 @@
#include "../Settings.hpp"
void ParseData(ENetPacket*packet,ENetPeer*peer,ENetHost *server); //Data Parser
void OnDisconnect(ENetHost *server,ENetPeer*peer);
void OnDisconnect(ENetHost *server,ENetPeer*peer,bool Timed);
void OnConnect(ENetHost *server,ENetPeer*peer);
ENetPacket* packet;
int PlayerCount = 0;
@ -59,12 +59,12 @@ void host_server(ENetHost *server) {
case ENET_EVENT_TYPE_DISCONNECT:
std::cout << event.peer->Name << " disconnected." << std::endl;
OnDisconnect(server,event.peer);
OnDisconnect(server,event.peer,false);
break;
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
std::cout << event.peer->Name << " timed out." << std::endl;
OnDisconnect(server,event.peer);
OnDisconnect(server,event.peer,true);
break;
case ENET_EVENT_TYPE_NONE: break;
}

View File

@ -600,8 +600,8 @@ enum {
ENET_PEER_PACKET_LOSS_INTERVAL = 10000,
ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024,
ENET_PEER_TIMEOUT_LIMIT = 32,
ENET_PEER_TIMEOUT_MINIMUM = 5000,
ENET_PEER_TIMEOUT_MAXIMUM = 30000,
ENET_PEER_TIMEOUT_MINIMUM = 2000,
ENET_PEER_TIMEOUT_MAXIMUM = 5000,
ENET_PEER_PING_INTERVAL = 500,
ENET_PEER_UNSEQUENCED_WINDOWS = 64,
ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024,