Skeleton DarkRPServer
This commit is contained in:
41
dedicated_server/CMakeLists.txt
Normal file
41
dedicated_server/CMakeLists.txt
Normal file
@@ -0,0 +1,41 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(DarkRP2D_DEDICATED_SERVER)
|
||||
set (CMAKE_CXX_STANDARD 11)
|
||||
include(ExternalProject)
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
set(CMAKE_BUILD_TYPE RELEASE)
|
||||
add_definitions(-DNDEBUG)
|
||||
endif(NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
MESSAGE( STATUS "PROJECT_SOURCE_DIR: " ${PROJECT_SOURCE_DIR} )
|
||||
MESSAGE( STATUS "DarkRP2D_DEDICATED_SERVER_SOURCE_DIR: " ${DarkRP2D_DEDICATED_SERVER_SOURCE_DIR} )
|
||||
|
||||
set(DarkRP2D_EXTERNAL_DIR ${DarkRP2D_DEDICATED_SERVER_SOURCE_DIR}/../external)
|
||||
set(SDL2_net_DIR ${DarkRP2D_EXTERNAL_DIR}/SDL2_net-2.0.1)
|
||||
set(SDL2_DIR ${DarkRP2D_EXTERNAL_DIR}/SDL2-2.0.8)
|
||||
|
||||
#Libs
|
||||
|
||||
find_package(SDL2 REQUIRED CONFIG)
|
||||
include_directories(${SDL2_INCLUDE_DIRS})
|
||||
|
||||
find_package(SDL2_net REQUIRED CONFIG)
|
||||
include_directories(${SDL2_NET_INCLUDE_DIRS})
|
||||
|
||||
MESSAGE( STATUS "SDL2 Lib: " ${SDL2_LIBRARIES} )
|
||||
MESSAGE( STATUS "SDL2_NET Lib: " ${SDL2_NET_LIBRARIES} )
|
||||
|
||||
file(GLOB_RECURSE DarkRP2D_DEDICATED_SERVER_SOURCE_FILES ${DarkRP2D_DEDICATED_SERVER_SOURCE_DIR}/src/*.cpp)
|
||||
|
||||
add_executable(DarkRP2DDServer ${DarkRP2D_DEDICATED_SERVER_SOURCE_FILES})
|
||||
|
||||
target_link_libraries(DarkRP2DDServer ${SDL2_LIBRARIES}
|
||||
${SDL2_NET_LIBRARIES} )
|
||||
|
||||
add_custom_target(CopyBinaries
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${SDL2_DLL} ${CMAKE_BINARY_DIR}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${SDL2_NET_DLL} ${CMAKE_BINARY_DIR}
|
||||
)
|
||||
|
||||
add_dependencies(DarkRP2DDServer CopyBinaries)
|
||||
85
dedicated_server/src/DarkRP2DDedicatedServer.cpp
Normal file
85
dedicated_server/src/DarkRP2DDedicatedServer.cpp
Normal file
@@ -0,0 +1,85 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
|
||||
#include <SDL_net.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
TCPsocket sd, csd; /* Socket descriptor, Client socket descriptor */
|
||||
IPaddress ip, *remoteIP;
|
||||
int quit, quit2;
|
||||
char buffer[512];
|
||||
|
||||
std::cout << "Starting DarkRP2D Server..." << std::endl;
|
||||
|
||||
if (SDLNet_Init() < 0)
|
||||
{
|
||||
fprintf(stderr, "SDLNet_Init: %s\n", SDLNet_GetError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Resolving the host using NULL make network interface to listen */
|
||||
if (SDLNet_ResolveHost(&ip, NULL, 9999) < 0)
|
||||
{
|
||||
fprintf(stderr, "SDLNet_ResolveHost: %s\n", SDLNet_GetError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
/* Open a connection with the IP provided (listen on the host's port) */
|
||||
if (!(sd = SDLNet_TCP_Open(&ip)))
|
||||
{
|
||||
fprintf(stderr, "SDLNet_TCP_Open: %s\n", SDLNet_GetError());
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
std::cout << "DarkRP2D Server started." << std::endl;
|
||||
std::cout << "Waiting for a Connection!" << std::endl;
|
||||
|
||||
/* Wait for a connection, send data and term */ quit = 0;
|
||||
while (!quit)
|
||||
{ /* This check the sd if there is a pending connection. * If there is one, accept that, and open a new socket for communicating */
|
||||
if ((csd = SDLNet_TCP_Accept(sd)))
|
||||
{ /* Now we can communicate with the client using csd socket * sd will remain opened waiting other connections */
|
||||
|
||||
/* Get the remote address */
|
||||
if ((remoteIP = SDLNet_TCP_GetPeerAddress(csd))) /* Print the address, converting in the host format */
|
||||
printf("Host connected: %x %d\n", SDLNet_Read32(&remoteIP->host), SDLNet_Read16(&remoteIP->port));
|
||||
else
|
||||
fprintf(stderr, "SDLNet_TCP_GetPeerAddress: %s\n", SDLNet_GetError());
|
||||
|
||||
quit2 = 0;
|
||||
while (!quit2)
|
||||
{
|
||||
if (SDLNet_TCP_Recv(csd, buffer, 512) > 0)
|
||||
{
|
||||
printf("Client say: %s\n", buffer);
|
||||
|
||||
if (strcmp(buffer, "exit") == 0) /* Terminate this connection */
|
||||
{
|
||||
quit2 = 1;
|
||||
printf("Terminate connection\n");
|
||||
}
|
||||
if (strcmp(buffer, "quit") == 0) /* Quit the program */
|
||||
{
|
||||
quit2 = 1;
|
||||
quit = 1;
|
||||
printf("Quit program\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Close the client socket */ SDLNet_TCP_Close(csd);
|
||||
}
|
||||
}
|
||||
std::cout << "Server is closing..." << std::endl;
|
||||
SDLNet_TCP_Close(sd);
|
||||
SDLNet_Quit();
|
||||
std::cout << "Server closed!" << std::endl;
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user