mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2025-07-03 00:05:34 +00:00
fixed a crash, added network codes
This commit is contained in:
parent
851343eedb
commit
25a5cd75c6
@ -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();
|
||||||
|
@ -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){
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user