mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-04 00:36:14 +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]);
|
std::string Packet = "Od:" + std::to_string(peer->serverVehicleID[0]);
|
||||||
SendToAll(server,peer, Packet,false,true);
|
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();
|
Packet.clear();
|
||||||
peer->DID.clear();
|
peer->DID.clear();
|
||||||
peer->Name.clear();
|
peer->Name.clear();
|
||||||
@ -35,9 +48,9 @@ void OnDisconnect(ENetHost *server,ENetPeer*peer){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OnConnect(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?
|
peer->serverVehicleID[0] = FindID(server,peer); ///TODO: WHAT IF IT IS THE SECOND VEHICLE?
|
||||||
std::string ID = "P" + std::to_string(peer->serverVehicleID[0]);
|
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]));
|
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);
|
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 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){
|
void VehicleParser(std::string Packet,ENetPeer*peer,ENetHost*server){
|
||||||
char Code = Packet.at(1);
|
char Code = Packet.at(1);
|
||||||
|
int ID = -1;
|
||||||
std::string Data = Packet.substr(3);
|
std::string Data = Packet.substr(3);
|
||||||
switch(Code){ //Spawned Destroyed Switched/Moved Reset
|
switch(Code){ //Spawned Destroyed Switched/Moved NotFound Reset
|
||||||
case 's':
|
case 's':
|
||||||
if(Data.at(0) == '0'){
|
if(Data.at(0) == '0'){
|
||||||
Packet = "Os:"+peer->Role+":"+peer->Name+":"+std::to_string(peer->serverVehicleID[0])+Packet.substr(4);
|
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);
|
SendToAll(server,peer,Packet,true,true);
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case 'd':
|
||||||
|
if(Packet.substr(3).find_first_not_of("0123456789") == std::string::npos){
|
||||||
|
ID = stoi(Packet.substr(3));
|
||||||
|
}
|
||||||
peer->VehicleData.clear();
|
peer->VehicleData.clear();
|
||||||
|
if(ID != -1 && ID == peer->serverVehicleID[0]){
|
||||||
SendToAll(server,peer,Packet,true,true);
|
SendToAll(server,peer,Packet,true,true);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'm':
|
case 'm':
|
||||||
break;
|
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':
|
case 'r':
|
||||||
SendToAll(server,peer,Packet,false,true);
|
SendToAll(server,peer,Packet,false,true);
|
||||||
break;
|
break;
|
||||||
@ -56,7 +81,9 @@ 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)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){
|
void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
|
||||||
std::string Packet = (char*)packet->data;
|
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;
|
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) {
|
||||||
@ -79,6 +106,9 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
|
|||||||
if(SubCode == 'R'){
|
if(SubCode == 'R'){
|
||||||
peer->Name = Packet.substr(2,Packet.find(':')-2);
|
peer->Name = Packet.substr(2,Packet.find(':')-2);
|
||||||
peer->DID = Packet.substr(Packet.find(':')+1);
|
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);
|
GrabRole(peer);
|
||||||
}
|
}
|
||||||
std::cout << "Name : " << peer->Name << std::endl;
|
std::cout << "Name : " << peer->Name << std::endl;
|
||||||
@ -89,6 +119,9 @@ void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
|
|||||||
}
|
}
|
||||||
VehicleParser(Packet,peer,server);
|
VehicleParser(Packet,peer,server);
|
||||||
return;
|
return;
|
||||||
|
case 'J':
|
||||||
|
SendToAll(server,peer,Packet,false,true);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
//V to Z
|
//V to Z
|
||||||
if(Packet.length() > 1000){
|
if(Packet.length() > 1000){
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#include "../Settings.hpp"
|
#include "../Settings.hpp"
|
||||||
|
|
||||||
void ParseData(ENetPacket*packet,ENetPeer*peer,ENetHost *server); //Data Parser
|
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);
|
void OnConnect(ENetHost *server,ENetPeer*peer);
|
||||||
ENetPacket* packet;
|
ENetPacket* packet;
|
||||||
int PlayerCount = 0;
|
int PlayerCount = 0;
|
||||||
@ -59,12 +59,12 @@ void host_server(ENetHost *server) {
|
|||||||
|
|
||||||
case ENET_EVENT_TYPE_DISCONNECT:
|
case ENET_EVENT_TYPE_DISCONNECT:
|
||||||
std::cout << event.peer->Name << " disconnected." << std::endl;
|
std::cout << event.peer->Name << " disconnected." << std::endl;
|
||||||
OnDisconnect(server,event.peer);
|
OnDisconnect(server,event.peer,false);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
|
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
|
||||||
std::cout << event.peer->Name << " timed out." << std::endl;
|
std::cout << event.peer->Name << " timed out." << std::endl;
|
||||||
OnDisconnect(server,event.peer);
|
OnDisconnect(server,event.peer,true);
|
||||||
break;
|
break;
|
||||||
case ENET_EVENT_TYPE_NONE: break;
|
case ENET_EVENT_TYPE_NONE: break;
|
||||||
}
|
}
|
||||||
|
@ -600,8 +600,8 @@ enum {
|
|||||||
ENET_PEER_PACKET_LOSS_INTERVAL = 10000,
|
ENET_PEER_PACKET_LOSS_INTERVAL = 10000,
|
||||||
ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024,
|
ENET_PEER_WINDOW_SIZE_SCALE = 64 * 1024,
|
||||||
ENET_PEER_TIMEOUT_LIMIT = 32,
|
ENET_PEER_TIMEOUT_LIMIT = 32,
|
||||||
ENET_PEER_TIMEOUT_MINIMUM = 5000,
|
ENET_PEER_TIMEOUT_MINIMUM = 2000,
|
||||||
ENET_PEER_TIMEOUT_MAXIMUM = 30000,
|
ENET_PEER_TIMEOUT_MAXIMUM = 5000,
|
||||||
ENET_PEER_PING_INTERVAL = 500,
|
ENET_PEER_PING_INTERVAL = 500,
|
||||||
ENET_PEER_UNSEQUENCED_WINDOWS = 64,
|
ENET_PEER_UNSEQUENCED_WINDOWS = 64,
|
||||||
ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024,
|
ENET_PEER_UNSEQUENCED_WINDOW_SIZE = 1024,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user