mirror of
https://github.com/BeamMP/BeamMP-Server.git
synced 2026-06-17 22:23:03 +00:00
data transfer fixes+handlers
This commit is contained in:
+1
-1
@@ -7,7 +7,7 @@ include_directories(${PROJECT_SOURCE_DIR}/curl)
|
|||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
|
||||||
add_executable(BeamMP-Server src/main.cpp src/http.cpp src/logger.cpp src/config.cpp src/Network/Server.cpp
|
add_executable(BeamMP-Server src/main.cpp src/http.cpp src/logger.cpp src/config.cpp src/Network/Server.cpp
|
||||||
src/Network/enet.h src/Network/DataParser.cpp src/heartbeat.cpp
|
src/Network/enet.hpp src/Network/DataParser.cpp src/heartbeat.cpp
|
||||||
src/Network/ClientHandler.cpp src/Network/functions.cpp src/Settings.hpp
|
src/Network/ClientHandler.cpp src/Network/functions.cpp src/Settings.hpp
|
||||||
src/Resources.cpp src/Network/TCPClientHandler.cpp)
|
src/Resources.cpp src/Network/TCPClientHandler.cpp)
|
||||||
target_link_libraries(BeamMP-Server winmm ws2_32 libcurl_a)
|
target_link_libraries(BeamMP-Server winmm ws2_32 libcurl_a)
|
||||||
@@ -2,39 +2,29 @@
|
|||||||
/// Created by Anonymous275 on 2/4/2020.
|
/// Created by Anonymous275 on 2/4/2020.
|
||||||
///
|
///
|
||||||
|
|
||||||
#include "enet.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "enet.hpp"
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "../logger.h"
|
||||||
|
#include "../Settings.hpp"
|
||||||
|
|
||||||
void NameRequest(ENetPeer*peer){
|
|
||||||
ENetPacket* packet = enet_packet_create ("NameRequest", //Send A Name Request to the Client
|
|
||||||
strlen ("NameRequest") + 1,
|
|
||||||
ENET_PACKET_FLAG_RELIABLE); //Create A reliable packet using the data
|
|
||||||
enet_peer_send(peer, 0, packet);
|
|
||||||
}
|
|
||||||
void Respond(const std::string& MSG, ENetPeer*peer){
|
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,ENetEvent event){
|
void SendToAll(ENetHost *server, ENetPeer*peer, const std::string& Data, bool All){
|
||||||
ENetPacket* packet;
|
|
||||||
for (int i = 0; i < server->connectedPeers; i++) {
|
for (int i = 0; i < server->connectedPeers; i++) {
|
||||||
//if (&server->peers[i] != event.peer) { if you don't want to send it to the person ho just connected
|
if (All || &server->peers[i] != peer) {
|
||||||
char Data[500];
|
enet_peer_send(&server->peers[i], 0, enet_packet_create(Data.c_str(),Data.length()+1, ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT));
|
||||||
sprintf(Data,"There is %zu Players Connected!",server->connectedPeers);
|
|
||||||
printf("test %d\n",server->peers[i].serverVehicleID);
|
|
||||||
|
|
||||||
packet = enet_packet_create(Data, strlen(Data)+1, 0);
|
|
||||||
|
|
||||||
enet_peer_send(&server->peers[i], 0, packet);
|
|
||||||
enet_host_flush(server);
|
enet_host_flush(server);
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnConnect(ENetPeer*peer){
|
void OnConnect(ENetPeer*peer){
|
||||||
ENetPacket* packet = enet_packet_create ("NR", 3,ENET_PACKET_FLAG_RELIABLE); //Create A reliable packet using the data
|
enet_peer_send(peer, 0, enet_packet_create ("NR", 3, ENET_PACKET_FLAG_RELIABLE));
|
||||||
enet_peer_send(peer, 0, packet);
|
//std::string ID = "P" + std::to_string(peer->serverVehicleID); /////HOLDUP
|
||||||
std::cout << "ID : " << peer->serverVehicleID << std::endl;
|
//enet_peer_send(peer, 0, enet_packet_create (ID.c_str(), ID.length()+1, ENET_PACKET_FLAG_RELIABLE));
|
||||||
|
//if(Debug)debug("ID : " + std::to_string(peer->serverVehicleID));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,14 +2,45 @@
|
|||||||
/// Created by Anonymous275 on 4/2/2020
|
/// Created by Anonymous275 on 4/2/2020
|
||||||
///
|
///
|
||||||
|
|
||||||
#include "enet.h"
|
|
||||||
#include <iostream>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "enet.hpp"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <iostream>
|
||||||
#include "../logger.h"
|
#include "../logger.h"
|
||||||
|
#include "../Settings.hpp"
|
||||||
|
|
||||||
|
std::vector<std::string> Split(const std::string& String,const std::string& delimiter);
|
||||||
|
void SendToAll(ENetHost *server, ENetPeer*peer, const std::string& Data,bool All);
|
||||||
void Respond(const std::string& MSG, ENetPeer*peer);
|
void Respond(const std::string& MSG, ENetPeer*peer);
|
||||||
void ParseData(ENetPacket*packet, ENetPeer*peer){
|
int FindID(ENetHost *server,ENetPeer*peer);
|
||||||
|
|
||||||
|
void VehicleParser(std::string Packet,ENetPeer*peer,ENetHost*server){
|
||||||
|
char Code = Packet.at(1);
|
||||||
|
std::string Data = Packet.substr(3);
|
||||||
|
std::vector<std::string> vector = Split(Packet,":");
|
||||||
|
switch(Code){ //Spawned Destroyed Switched/Moved Reset
|
||||||
|
case 's':
|
||||||
|
if(!stoi(vector.at(0))){
|
||||||
|
peer->serverVehicleID[0] = FindID(server,peer); ///TODO: WHAT IF IT IS THE SECOND VEHICLE?!
|
||||||
|
vector.at(1) = std::to_string(peer->serverVehicleID[0]);
|
||||||
|
Packet.clear();
|
||||||
|
for(const std::string&a : vector)Packet += a + ":";
|
||||||
|
Packet = Packet.substr(0,Packet.length()-1);
|
||||||
|
}
|
||||||
|
SendToAll(server,peer,Packet,true);
|
||||||
|
break;
|
||||||
|
case 'd':
|
||||||
|
SendToAll(server,peer,Packet,true);
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
SendToAll(server,peer,Packet,true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParseData(ENetPacket*packet, ENetPeer*peer, ENetHost*server){
|
||||||
std::string Packet = (char*)packet->data;
|
std::string Packet = (char*)packet->data;
|
||||||
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);
|
||||||
@@ -18,9 +49,16 @@ void ParseData(ENetPacket*packet, ENetPeer*peer){
|
|||||||
Respond("p",peer);
|
Respond("p",peer);
|
||||||
return;
|
return;
|
||||||
case 'N':
|
case 'N':
|
||||||
if(SubCode == 'R')peer->Name = (void *)Packet.substr(2).c_str();
|
if(SubCode == 'R')peer->Name = Packet.substr(2);
|
||||||
std::cout << "Name : " << (char *)peer->Name << std::endl;
|
std::cout << "Name : " << peer->Name << std::endl;
|
||||||
|
return;
|
||||||
|
case 'O':
|
||||||
|
std::cout << peer->Name << " : " << Packet << std::endl;
|
||||||
|
VehicleParser(Packet,peer,server);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::cout << "Data : " << Packet << std::endl;
|
//V to Z
|
||||||
|
std::cout << peer->Name << " : " << Packet << std::endl;
|
||||||
|
if(Code <= 90 && Code >= 86)SendToAll(server,peer,Packet,false);
|
||||||
|
if(Debug)debug("Data : " + Packet);
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-17
@@ -3,29 +3,31 @@
|
|||||||
///
|
///
|
||||||
|
|
||||||
#define ENET_IMPLEMENTATION
|
#define ENET_IMPLEMENTATION
|
||||||
#include "enet.h"
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "enet.hpp"
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include "../logger.h"
|
#include "../logger.h"
|
||||||
#include "../Settings.hpp"
|
#include "../Settings.hpp"
|
||||||
|
|
||||||
void ParseData(ENetPacket*packet,ENetPeer*peer); //Data Parser
|
void ParseData(ENetPacket*packet,ENetPeer*peer,ENetHost *server); //Data Parser
|
||||||
void OnConnect(ENetPeer*peer);
|
void OnConnect(ENetPeer*peer);
|
||||||
|
|
||||||
ENetPacket* packet;
|
ENetPacket* packet;
|
||||||
int PlayerCount = 0;
|
int PlayerCount = 0;
|
||||||
|
|
||||||
int FindID(ENetHost *server,ENetPeer*peer){
|
int FindID(ENetHost *server,ENetPeer*peer){
|
||||||
int OpenID = 1;
|
int OpenID = 1, *p;
|
||||||
bool Found;
|
bool Found;
|
||||||
do {
|
do {
|
||||||
Found = true;
|
Found = true;
|
||||||
for (int i = 0; i < server->connectedPeers; i++) {
|
for (int i = 0; i < server->connectedPeers; i++) {
|
||||||
if (&server->peers[i] != peer) {
|
if (&server->peers[i] != peer) {
|
||||||
if(server->peers[i].serverVehicleID == OpenID){
|
for(p=server->peers[i].serverVehicleID; p<(&server->peers[i].serverVehicleID)[1]; p++){
|
||||||
Found = false;
|
if(*p == OpenID) {
|
||||||
OpenID++;
|
Found = false;
|
||||||
break;
|
OpenID++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -42,31 +44,29 @@ void host_server(ENetHost *server) {
|
|||||||
case ENET_EVENT_TYPE_CONNECT:
|
case ENET_EVENT_TYPE_CONNECT:
|
||||||
printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port);
|
printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port);
|
||||||
//the data should be the client info could be name for now it's Client information
|
//the data should be the client info could be name for now it's Client information
|
||||||
event.peer->Name = (void *)"Client information";
|
event.peer->Name = "Client information";
|
||||||
event.peer->gameVehicleID[0] = 0;
|
/*event.peer->gameVehicleID[0] = 0;
|
||||||
event.peer->serverVehicleID = FindID(server, event.peer);
|
event.peer->serverVehicleID[0] = FindID(server, event.peer);*/
|
||||||
OnConnect(event.peer);
|
OnConnect(event.peer);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ENET_EVENT_TYPE_RECEIVE:
|
case ENET_EVENT_TYPE_RECEIVE:
|
||||||
|
ParseData(event.packet,event.peer,server);
|
||||||
ParseData(event.packet,event.peer);
|
|
||||||
/*->dataLength,event.packet->data, (char *)event.peer->data, event.channelID*/ //We grab and Parse the Data
|
/*->dataLength,event.packet->data, (char *)event.peer->data, event.channelID*/ //We grab and Parse the Data
|
||||||
/* Clean up the packet now that we're done using it. */
|
/* Clean up the packet now that we're done using it. */
|
||||||
enet_packet_destroy (event.packet);
|
enet_packet_destroy (event.packet);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ENET_EVENT_TYPE_DISCONNECT:
|
case ENET_EVENT_TYPE_DISCONNECT:
|
||||||
printf ("%s disconnected.\n", (char *)event.peer->Name);
|
std::cout << event.peer->Name << " disconnected." << std::endl;
|
||||||
// Reset the peer's client information.
|
// Reset the peer's client information.
|
||||||
event.peer->Name = nullptr;
|
event.peer->Name.clear();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
|
case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT:
|
||||||
printf ("%s timed out.\n", (char *)event.peer->Name);
|
std::cout << event.peer->Name << " timed out." << std::endl;
|
||||||
event.peer->Name = nullptr;
|
event.peer->Name.clear();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ENET_EVENT_TYPE_NONE: break;
|
case ENET_EVENT_TYPE_NONE: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,7 +92,6 @@
|
|||||||
#include <WinSock2.h>
|
#include <WinSock2.h>
|
||||||
#include <WS2tcpip.h>
|
#include <WS2tcpip.h>
|
||||||
#include <mmsystem.h>
|
#include <mmsystem.h>
|
||||||
|
|
||||||
#include <intrin.h>
|
#include <intrin.h>
|
||||||
|
|
||||||
#if defined(_WIN32) && defined(_MSC_VER)
|
#if defined(_WIN32) && defined(_MSC_VER)
|
||||||
@@ -637,9 +636,9 @@ typedef struct _ENetPeer {
|
|||||||
enet_uint8 outgoingSessionID;
|
enet_uint8 outgoingSessionID;
|
||||||
enet_uint8 incomingSessionID;
|
enet_uint8 incomingSessionID;
|
||||||
ENetAddress address; /**< Internet address of the peer */
|
ENetAddress address; /**< Internet address of the peer */
|
||||||
void * Name; /**< Application private data, may be freely modified */
|
std::string Name; /**< Application private data, may be freely modified */
|
||||||
int gameVehicleID[50]; //added By Anonymous275
|
int gameVehicleID[10] = {0}; //added By Anonymous275
|
||||||
int serverVehicleID; //added By Anonymous275
|
int serverVehicleID[10] = {0}; //added By Anonymous275
|
||||||
ENetPeerState state;
|
ENetPeerState state;
|
||||||
ENetChannel * channels;
|
ENetChannel * channels;
|
||||||
size_t channelCount; /**< Number of channels allocated for communication with peer */
|
size_t channelCount; /**< Number of channels allocated for communication with peer */
|
||||||
@@ -3441,11 +3440,11 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void * enet_peer_get_data(ENetPeer *peer) {
|
void * enet_peer_get_data(ENetPeer *peer) {
|
||||||
return (void *) peer->Name;
|
return (void *) peer->Name.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
void enet_peer_set_data(ENetPeer *peer, const void *Name) {
|
void enet_peer_set_data(ENetPeer *peer, const void *Name) {
|
||||||
peer->Name = (enet_uint32 *) Name;
|
peer->Name = (char *) Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
void * enet_packet_get_data(ENetPacket *packet) {
|
void * enet_packet_get_data(ENetPacket *packet) {
|
||||||
@@ -4421,7 +4420,7 @@ extern "C" {
|
|||||||
currentPeer->host = host;
|
currentPeer->host = host;
|
||||||
currentPeer->incomingPeerID = currentPeer - host->peers;
|
currentPeer->incomingPeerID = currentPeer - host->peers;
|
||||||
currentPeer->outgoingSessionID = currentPeer->incomingSessionID = 0xFF;
|
currentPeer->outgoingSessionID = currentPeer->incomingSessionID = 0xFF;
|
||||||
currentPeer->Name = NULL;
|
currentPeer->Name.clear();
|
||||||
|
|
||||||
enet_list_clear(¤tPeer->acknowledgements);
|
enet_list_clear(¤tPeer->acknowledgements);
|
||||||
enet_list_clear(¤tPeer->sentReliableCommands);
|
enet_list_clear(¤tPeer->sentReliableCommands);
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
///
|
///
|
||||||
|
|
||||||
extern bool Private;
|
extern bool Private;
|
||||||
|
extern bool Debug;
|
||||||
extern int MaxPlayers;
|
extern int MaxPlayers;
|
||||||
extern int UDPPort;
|
extern int UDPPort;
|
||||||
extern int TCPPort;
|
extern int TCPPort;
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
//
|
///
|
||||||
// Created by Anonymous275 on 4/2/2020.
|
/// Created by Anonymous275 on 4/2/2020.
|
||||||
//
|
///
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
|||||||
Reference in New Issue
Block a user