diff --git a/CMakeLists.txt b/CMakeLists.txt index 959e962..00ebf0d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,5 +3,5 @@ project(BeamNG-MP-Server) set(CMAKE_CXX_STANDARD 14) -add_executable(BeamNG-MP-Server src/main.cpp src/logger.cpp src/config.cpp src/Network/Server.cpp src/Network/enet.h src/Network/DataParser.cpp src/heartbeat.cpp src/heartbeat.h) +add_executable(BeamNG-MP-Server src/main.cpp src/logger.cpp src/config.cpp src/Network/Server.cpp src/Network/enet.h src/Network/DataParser.cpp src/heartbeat.cpp src/heartbeat.h src/Network/ClientHandler.cpp) target_link_libraries(BeamNG-MP-Server winmm ws2_32) \ No newline at end of file diff --git a/src/Network/ClientHandler.cpp b/src/Network/ClientHandler.cpp new file mode 100644 index 0000000..c3e7c9d --- /dev/null +++ b/src/Network/ClientHandler.cpp @@ -0,0 +1,26 @@ +// +// Created by Anonymous275 on 2/4/2020. +// +#include "enet.h" +#include + +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 SendToAll(ENetHost *server,ENetEvent event){ + ENetPacket* packet; + 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 + char Data[30]; + sprintf(Data,"There is %d Players Connected!",server->connectedPeers); + packet = enet_packet_create(Data, strlen(Data)+1, 0); + enet_peer_send(&server->peers[i], 0, packet); + enet_host_flush(server); + //} + } +} + diff --git a/src/Network/DataParser.cpp b/src/Network/DataParser.cpp index b01e05b..6f57747 100644 --- a/src/Network/DataParser.cpp +++ b/src/Network/DataParser.cpp @@ -1,12 +1,18 @@ // -// Created by Anonymous275 on 1/29/2020. +// Created by Anonymous275 on 4/2/2020. // #include "enet.h" #include -void ParseData(size_t Length, enet_uint8* Data, char* Sender, enet_uint8 ChannelID){ //here we will parse the data - printf("A packet of length %zu containing \"%s\" was received from \"%s\" on channel %u.\n", - Length, - Data, - Sender, - ChannelID); +#include "../logger.h" +using namespace std; +char Name[20] = ""; +void ParseData(ENetPacket*packet,ENetPeer*peer){ //here we will parse the data + enet_uint8* Data = packet->data; + if(strcmp((char*)peer->data,"Client information")==0){ //Checks if the Client has no name + sprintf(Name,"%s",Data); + peer->data = (void *)Name; + char Info[100]; + sprintf(Info,"Client Name is %s ID : %u\n",Name,peer->connectID); //ID System + info(Info); //Logs the data + } } \ No newline at end of file diff --git a/src/Network/Server.cpp b/src/Network/Server.cpp index f5cc87c..20fa866 100644 --- a/src/Network/Server.cpp +++ b/src/Network/Server.cpp @@ -1,22 +1,33 @@ +// +// Created by Anonymous275 on 4/2/2020. +// + #define ENET_IMPLEMENTATION #include "enet.h" #include #include #include "../logger.h" +void ParseData(ENetPacket*packet,ENetPeer*peer); //Data Parser +void NameRequest(ENetPeer*peer); +void SendToAll(ENetHost *server,ENetEvent event); +ENetPacket* packet; + -void ParseData(size_t Length, enet_uint8* Data, char* Sender, enet_uint8 ChannelID); //Data Parser void host_server(ENetHost *server) { ENetEvent event; while (enet_host_service(server, &event, 2) > 0) { switch (event.type) { case ENET_EVENT_TYPE_CONNECT: - printf("new Client Connected ::1:%u.\n", event.peer->address.port); - + printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port); //Help xD //the data should be the client info could be name for now it's Client information + NameRequest(event.peer); event.peer->data = (void *)"Client information"; + + SendToAll(server,event); + break; case ENET_EVENT_TYPE_RECEIVE: - ParseData(event.packet->dataLength,event.packet->data, (char *)event.peer->data, event.channelID); //We grab and Parse the Data + ParseData(event.packet,event.peer/*->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. */ enet_packet_destroy (event.packet); break; @@ -28,7 +39,7 @@ void host_server(ENetHost *server) { break; case ENET_EVENT_TYPE_DISCONNECT_TIMEOUT: - printf ("%s timeout.\n", (char *)event.peer->data); + printf ("%s timed out.\n", (char *)event.peer->data); event.peer->data = NULL; break; @@ -47,11 +58,10 @@ void ServerMain(int Port, int MaxClients) { ENetAddress address = {0}; - address.host = ENET_HOST_ANY; /* Bind the server to the default localhost. */ - address.port = Port; /* Bind the server to port 7777. */ + address.host = ENET_HOST_ANY; //Bind the server to the default localhost. + address.port = Port; // Sets the port - - /* create a server */ + //create a server info("starting server with a maximum of " + to_string(MaxClients) + " Clients..."); server = enet_host_create(&address, MaxClients, 2, 0, 0); if (server == NULL) { @@ -69,4 +79,3 @@ void ServerMain(int Port, int MaxClients) { enet_deinitialize(); return; } - diff --git a/src/logger.h b/src/logger.h index 38571e8..f6151ad 100644 --- a/src/logger.h +++ b/src/logger.h @@ -1,5 +1,5 @@ // -// Created by jojos38 on 28.01.2020. +// Created by Anonymous275 on 4/2/2020. // #define LOGGER_H