mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-03 16:25:35 +00:00
Fixed timeout, added vehicle data tracker
This commit is contained in:
parent
a85da1e05e
commit
851343eedb
@ -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]));
|
||||
}
|
||||
|
@ -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){
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user