mirror of https://github.com/GOSTSec/poolserver
Intel
12 years ago
committed by
root
commit
be5c691c80
27 changed files with 867 additions and 0 deletions
@ -0,0 +1,17 @@ |
|||||||
|
build*/ |
||||||
|
.directory |
||||||
|
.mailmap |
||||||
|
*.orig |
||||||
|
*.rej |
||||||
|
*~ |
||||||
|
.hg/ |
||||||
|
*.kdev* |
||||||
|
.DS_Store |
||||||
|
CMakeLists.txt.user |
||||||
|
*.bak |
||||||
|
*.patch |
||||||
|
*.diff |
||||||
|
*.REMOTE.* |
||||||
|
*.BACKUP.* |
||||||
|
*.BASE.* |
||||||
|
*.LOCAL.* |
@ -0,0 +1,43 @@ |
|||||||
|
# Project name! |
||||||
|
project(PoolServer) |
||||||
|
|
||||||
|
# CMake policies |
||||||
|
cmake_minimum_required(VERSION 2.6) |
||||||
|
|
||||||
|
# Set macros |
||||||
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/macros") |
||||||
|
|
||||||
|
# build in Release-mode by default if not explicitly set |
||||||
|
if( NOT CMAKE_BUILD_TYPE ) |
||||||
|
set(CMAKE_BUILD_TYPE "Release") |
||||||
|
endif() |
||||||
|
|
||||||
|
# Install path |
||||||
|
if( PREFIX ) |
||||||
|
set(CMAKE_INSTALL_PREFIX "${PREFIX}") |
||||||
|
endif() |
||||||
|
|
||||||
|
# Build options |
||||||
|
include(cmake/options.cmake) |
||||||
|
|
||||||
|
set(Boost_USE_STATIC_LIBS OFF) |
||||||
|
set(Boost_USE_MULTITHREADED ON) |
||||||
|
set(Boost_USE_STATIC_RUNTIME OFF) |
||||||
|
set(Boost_ALL_DYN_LINK ON) |
||||||
|
|
||||||
|
# Boost |
||||||
|
find_package(Boost 1.53 COMPONENTS thread chrono program_options date_time REQUIRED) |
||||||
|
message(status "** Boost Include: ${Boost_INCLUDE_DIR}") |
||||||
|
message(status "** Boost Libraries: ${Boost_LIBRARY_DIRS}") |
||||||
|
message(status "** Boost Libraries: ${Boost_LIBRARIES}") |
||||||
|
|
||||||
|
# Mysql |
||||||
|
if( MYSQL ) |
||||||
|
find_package(MySQL REQUIRED) |
||||||
|
endif() |
||||||
|
|
||||||
|
# Print options |
||||||
|
include(cmake/showoptions.cmake) |
||||||
|
|
||||||
|
# Add sources |
||||||
|
add_subdirectory(src) |
@ -0,0 +1,176 @@ |
|||||||
|
# |
||||||
|
# Find the MySQL client includes and library |
||||||
|
# |
||||||
|
|
||||||
|
# This module defines |
||||||
|
# MYSQL_INCLUDE_DIR, where to find mysql.h |
||||||
|
# MYSQL_LIBRARIES, the libraries to link against to connect to MySQL |
||||||
|
# MYSQL_FOUND, if false, you cannot build anything that requires MySQL. |
||||||
|
|
||||||
|
# also defined, but not for general use are |
||||||
|
# MYSQL_LIBRARY, where to find the MySQL library. |
||||||
|
|
||||||
|
set( MYSQL_FOUND 0 ) |
||||||
|
|
||||||
|
if( UNIX ) |
||||||
|
set(MYSQL_CONFIG_PREFER_PATH "$ENV{MYSQL_HOME}/bin" CACHE FILEPATH |
||||||
|
"preferred path to MySQL (mysql_config)" |
||||||
|
) |
||||||
|
|
||||||
|
find_program(MYSQL_CONFIG mysql_config |
||||||
|
${MYSQL_CONFIG_PREFER_PATH} |
||||||
|
/usr/local/mysql/bin/ |
||||||
|
/usr/local/bin/ |
||||||
|
/usr/bin/ |
||||||
|
) |
||||||
|
|
||||||
|
if( MYSQL_CONFIG ) |
||||||
|
message(STATUS "Using mysql-config: ${MYSQL_CONFIG}") |
||||||
|
# set INCLUDE_DIR |
||||||
|
exec_program(${MYSQL_CONFIG} |
||||||
|
ARGS --include |
||||||
|
OUTPUT_VARIABLE MY_TMP |
||||||
|
) |
||||||
|
|
||||||
|
string(REGEX REPLACE "-I([^ ]*)( .*)?" "\\1" MY_TMP "${MY_TMP}") |
||||||
|
set(MYSQL_ADD_INCLUDE_PATH ${MY_TMP} CACHE FILEPATH INTERNAL) |
||||||
|
#message("[DEBUG] MYSQL ADD_INCLUDE_PATH : ${MYSQL_ADD_INCLUDE_PATH}") |
||||||
|
# set LIBRARY_DIR |
||||||
|
exec_program(${MYSQL_CONFIG} |
||||||
|
ARGS --libs_r |
||||||
|
OUTPUT_VARIABLE MY_TMP |
||||||
|
) |
||||||
|
set(MYSQL_ADD_LIBRARIES "") |
||||||
|
string(REGEX MATCHALL "-l[^ ]*" MYSQL_LIB_LIST "${MY_TMP}") |
||||||
|
foreach(LIB ${MYSQL_LIB_LIST}) |
||||||
|
string(REGEX REPLACE "[ ]*-l([^ ]*)" "\\1" LIB "${LIB}") |
||||||
|
list(APPEND MYSQL_ADD_LIBRARIES "${LIB}") |
||||||
|
#message("[DEBUG] MYSQL ADD_LIBRARIES : ${MYSQL_ADD_LIBRARIES}") |
||||||
|
endforeach(LIB ${MYSQL_LIB_LIST}) |
||||||
|
|
||||||
|
set(MYSQL_ADD_LIBRARIES_PATH "") |
||||||
|
string(REGEX MATCHALL "-L[^ ]*" MYSQL_LIBDIR_LIST "${MY_TMP}") |
||||||
|
foreach(LIB ${MYSQL_LIBDIR_LIST}) |
||||||
|
string(REGEX REPLACE "[ ]*-L([^ ]*)" "\\1" LIB "${LIB}") |
||||||
|
list(APPEND MYSQL_ADD_LIBRARIES_PATH "${LIB}") |
||||||
|
#message("[DEBUG] MYSQL ADD_LIBRARIES_PATH : ${MYSQL_ADD_LIBRARIES_PATH}") |
||||||
|
endforeach(LIB ${MYSQL_LIBS}) |
||||||
|
|
||||||
|
else( MYSQL_CONFIG ) |
||||||
|
set(MYSQL_ADD_LIBRARIES "") |
||||||
|
list(APPEND MYSQL_ADD_LIBRARIES "mysqlclient_r") |
||||||
|
endif( MYSQL_CONFIG ) |
||||||
|
endif( UNIX ) |
||||||
|
|
||||||
|
find_path(MYSQL_INCLUDE_DIR |
||||||
|
NAMES |
||||||
|
mysql.h |
||||||
|
PATHS |
||||||
|
${MYSQL_ADD_INCLUDE_PATH} |
||||||
|
/usr/include |
||||||
|
/usr/include/mysql |
||||||
|
/usr/local/include |
||||||
|
/usr/local/include/mysql |
||||||
|
/usr/local/mysql/include |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.6/include" |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.5/include" |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.1/include" |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.0/include" |
||||||
|
"C:/Program Files/MySQL/include" |
||||||
|
"C:/MySQL/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/include" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/include" |
||||||
|
"$ENV{ProgramFiles}/MySQL/*/include" |
||||||
|
"$ENV{SystemDrive}/MySQL/*/include" |
||||||
|
"c:/msys/local/include" |
||||||
|
DOC |
||||||
|
"Specify the directory containing mysql.h." |
||||||
|
) |
||||||
|
|
||||||
|
if( UNIX ) |
||||||
|
foreach(LIB ${MYSQL_ADD_LIBRARIES}) |
||||||
|
find_library( MYSQL_LIBRARY |
||||||
|
NAMES |
||||||
|
mysql libmysql ${LIB} |
||||||
|
PATHS |
||||||
|
${MYSQL_ADD_LIBRARIES_PATH} |
||||||
|
/usr/lib |
||||||
|
/usr/lib/mysql |
||||||
|
/usr/local/lib |
||||||
|
/usr/local/lib/mysql |
||||||
|
/usr/local/mysql/lib |
||||||
|
DOC "Specify the location of the mysql library here." |
||||||
|
) |
||||||
|
endforeach(LIB ${MYSQL_ADD_LIBRARY}) |
||||||
|
endif( UNIX ) |
||||||
|
|
||||||
|
if( WIN32 ) |
||||||
|
find_library( MYSQL_LIBRARY |
||||||
|
NAMES |
||||||
|
libmysql |
||||||
|
PATHS |
||||||
|
${MYSQL_ADD_LIBRARIES_PATH} |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.6/lib/opt" |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.5/lib/opt" |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.1/lib/opt" |
||||||
|
"C:/Program Files/MySQL/MySQL Server 5.0/lib/opt" |
||||||
|
"C:/Program Files/MySQL/lib" |
||||||
|
"C:/MySQL/lib/debug" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.6;Location]/lib/opt" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.5;Location]/lib/opt" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/lib/opt" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.6;Location]/lib/opt" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.5;Location]/lib/opt" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/lib/opt" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/lib" |
||||||
|
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt" |
||||||
|
"$ENV{ProgramFiles}/MySQL/*/lib/opt" |
||||||
|
"$ENV{SystemDrive}/MySQL/*/lib/opt" |
||||||
|
"c:/msys/local/include" |
||||||
|
DOC "Specify the location of the mysql library here." |
||||||
|
) |
||||||
|
endif( WIN32 ) |
||||||
|
|
||||||
|
# On Windows you typically don't need to include any extra libraries |
||||||
|
# to build MYSQL stuff. |
||||||
|
|
||||||
|
if( NOT WIN32 ) |
||||||
|
find_library( MYSQL_EXTRA_LIBRARIES |
||||||
|
NAMES |
||||||
|
z zlib |
||||||
|
PATHS |
||||||
|
/usr/lib |
||||||
|
/usr/local/lib |
||||||
|
DOC |
||||||
|
"if more libraries are necessary to link in a MySQL client (typically zlib), specify them here." |
||||||
|
) |
||||||
|
else( NOT WIN32 ) |
||||||
|
set( MYSQL_EXTRA_LIBRARIES "" ) |
||||||
|
endif( NOT WIN32 ) |
||||||
|
|
||||||
|
if( MYSQL_LIBRARY ) |
||||||
|
if( MYSQL_INCLUDE_DIR ) |
||||||
|
set( MYSQL_FOUND 1 ) |
||||||
|
message(STATUS "Found MySQL library: ${MYSQL_LIBRARY}") |
||||||
|
message(STATUS "Found MySQL headers: ${MYSQL_INCLUDE_DIR}") |
||||||
|
else( MYSQL_INCLUDE_DIR ) |
||||||
|
message(FATAL_ERROR "Could not find MySQL headers! Please install the development libraries and headers") |
||||||
|
endif( MYSQL_INCLUDE_DIR ) |
||||||
|
mark_as_advanced( MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR ) |
||||||
|
else( MYSQL_LIBRARY ) |
||||||
|
message(FATAL_ERROR "Could not find the MySQL libraries! Please install the development libraries and headers") |
||||||
|
endif( MYSQL_LIBRARY ) |
@ -0,0 +1,4 @@ |
|||||||
|
option(POOLSERVER "Build Pool Server" 1) |
||||||
|
option(STRATUM "Build Pool Server with Stratum" 1) |
||||||
|
option(STATSSERVER "Build Stats Server" 1) |
||||||
|
option(MYSQL "Use MySQL database" 1) |
@ -0,0 +1,42 @@ |
|||||||
|
# output generic information about the core and buildtype chosen |
||||||
|
message("") |
||||||
|
# message("* PoolServer revision : ${rev_hash} ${rev_date} (${rev_branch} branch)") |
||||||
|
if( UNIX ) |
||||||
|
message("* Buildtype : ${CMAKE_BUILD_TYPE}") |
||||||
|
endif() |
||||||
|
message("") |
||||||
|
|
||||||
|
# output information about installation-directories and locations |
||||||
|
|
||||||
|
message("* Install core to : ${CMAKE_INSTALL_PREFIX}") |
||||||
|
message("") |
||||||
|
|
||||||
|
# Show infomation about the options selected during configuration |
||||||
|
|
||||||
|
if(POOLSERVER) |
||||||
|
message("* Build Pool Server : Yes (default)") |
||||||
|
else() |
||||||
|
message("* Build Pool Server : No") |
||||||
|
endif() |
||||||
|
|
||||||
|
if(STRATUM) |
||||||
|
message("* Build with Stratum : Yes (default)") |
||||||
|
add_definitions(-DWITH_STRATUM) |
||||||
|
else() |
||||||
|
message("* Build with Stratum : No") |
||||||
|
endif() |
||||||
|
|
||||||
|
if(STATSSERVER) |
||||||
|
message("* Build Stats Server : Yes (default)") |
||||||
|
else() |
||||||
|
message("* Build Stats Server : No") |
||||||
|
endif() |
||||||
|
|
||||||
|
if( MYSQL ) |
||||||
|
message("* Use MySQL database : Yes (default)") |
||||||
|
add_definitions(-DWITH_MYSQL) |
||||||
|
else() |
||||||
|
message("* Use MySQL database : No") |
||||||
|
endif() |
||||||
|
|
||||||
|
message("") |
@ -0,0 +1,6 @@ |
|||||||
|
|
||||||
|
add_subdirectory(server) |
||||||
|
|
||||||
|
if(TOOLS) |
||||||
|
add_subdirectory(tools) |
||||||
|
endif(TOOLS) |
@ -0,0 +1,11 @@ |
|||||||
|
if(POOLSERVER) |
||||||
|
add_subdirectory(shared) |
||||||
|
add_subdirectory(poolserver) |
||||||
|
endif() |
||||||
|
|
||||||
|
if(STATSSERVER) |
||||||
|
if(NOT POOLSERVER) |
||||||
|
add_subdirectory(shared) |
||||||
|
endif() |
||||||
|
add_subdirectory(statsserver) |
||||||
|
endif() |
@ -0,0 +1,41 @@ |
|||||||
|
|
||||||
|
# Add sources |
||||||
|
file(GLOB_RECURSE sources_Server Server/*.cpp Server/*.h) |
||||||
|
file(GLOB sources_localdir *.cpp *.h) |
||||||
|
|
||||||
|
set(sources_Poolserver |
||||||
|
${sources_Server} |
||||||
|
${sources_localdir} |
||||||
|
) |
||||||
|
|
||||||
|
include_directories( |
||||||
|
${CMAKE_SOURCE_DIR}/src/server/shared |
||||||
|
${CMAKE_SOURCE_DIR}/src/server/shared/Configuration |
||||||
|
${CMAKE_SOURCE_DIR}/src/server/shared/Database |
||||||
|
${CMAKE_SOURCE_DIR}/src/server/shared/Logging |
||||||
|
${CMAKE_SOURCE_DIR}/src/server/poolserver/Server |
||||||
|
${Boost_INCLUDE_DIR} |
||||||
|
${MYSQL_INCLUDE_DIR} |
||||||
|
) |
||||||
|
|
||||||
|
# Create executable |
||||||
|
add_executable(poolserver |
||||||
|
${sources_Poolserver} |
||||||
|
) |
||||||
|
message(status "SHared files: ${sources_Shared}") |
||||||
|
|
||||||
|
# Link libraries |
||||||
|
target_link_libraries(poolserver |
||||||
|
shared |
||||||
|
${MYSQL_LIBRARY} |
||||||
|
${Boost_LIBRARIES} |
||||||
|
/usr/local/lib/libboost_thread.so.1.53.0 |
||||||
|
/usr/local/lib/libboost_program_options.so |
||||||
|
) |
||||||
|
|
||||||
|
# Install |
||||||
|
if(UNIX) |
||||||
|
install(TARGETS poolserver DESTINATION bin) |
||||||
|
elseif(WIN32) |
||||||
|
install(TARGETS poolserver DESTINATION "${CMAKE_INSTALL_PREFIX}") |
||||||
|
endif() |
@ -0,0 +1,83 @@ |
|||||||
|
#include <iostream> |
||||||
|
|
||||||
|
#include "Server.h" |
||||||
|
#include "Config.h" |
||||||
|
#include "Log.h" |
||||||
|
#include <boost/program_options.hpp> |
||||||
|
#include <iostream> |
||||||
|
|
||||||
|
bool InitConfig(int argc, char *argv[]) |
||||||
|
{ |
||||||
|
// Containers
|
||||||
|
boost::program_options::options_description descGeneric; |
||||||
|
boost::program_options::options_description descServer; |
||||||
|
boost::program_options::options_description descStratum; |
||||||
|
boost::program_options::options_description descLogging; |
||||||
|
boost::program_options::options_description cmdlineOptions; |
||||||
|
boost::program_options::options_description fileOptions; |
||||||
|
|
||||||
|
// Generic
|
||||||
|
descGeneric.add_options() |
||||||
|
("version,v", "print version string") |
||||||
|
("help,h", "produce help message") |
||||||
|
("config,c", boost::program_options::value<std::string>()->default_value("settings.cfg"),"name of a file of a configuration.") |
||||||
|
; |
||||||
|
|
||||||
|
// Server
|
||||||
|
descServer.add_options() |
||||||
|
("MinDiffTime", boost::program_options::value<uint32_t>()->default_value(100), "Minimum server diff time") |
||||||
|
; |
||||||
|
|
||||||
|
// Stratum
|
||||||
|
descStratum.add_options() |
||||||
|
("StratumHost,sh", boost::program_options::value<std::string>()->default_value("0.0.0.0"), "Stratum server host") |
||||||
|
("StratumPort,sp", boost::program_options::value<uint16_t>()->default_value(3333), "Stratum server port") |
||||||
|
; |
||||||
|
|
||||||
|
// Logging
|
||||||
|
descLogging.add_options() |
||||||
|
("LogConsoleLevel", boost::program_options::value<uint32_t>()->default_value(LOG_LEVEL_INFO), "Console log level (0-None, 1-Error, 2-Warn, 3-Info, 4-Debug)") |
||||||
|
("LogConsoleDebugMask", boost::program_options::value<uint32_t>()->default_value(0), "Console log debug mask") |
||||||
|
("LogFilePath", boost::program_options::value<std::string>()->default_value("."), "File log path") |
||||||
|
("LogFileLevel", boost::program_options::value<uint32_t>()->default_value(LOG_LEVEL_WARN), "File log level (0-None, 1-Error, 2-Warn, 3-Info, 4-Debug)") |
||||||
|
("LogFileDebugMask", boost::program_options::value<uint32_t>()->default_value(0), "File log debug mask") |
||||||
|
; |
||||||
|
|
||||||
|
cmdlineOptions.add(descGeneric).add(descServer).add(descStratum).add(descLogging); |
||||||
|
fileOptions.add(descServer).add(descStratum).add(descLogging); |
||||||
|
|
||||||
|
store(boost::program_options::command_line_parser(argc, argv).options(cmdlineOptions).run(), sConfig.vm); |
||||||
|
notify(sConfig.vm); |
||||||
|
|
||||||
|
if (sConfig.vm.count("help")) { |
||||||
|
std::cout << cmdlineOptions << std::endl; |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
std::ifstream ifs(sConfig.Get<std::string>("LogFilePath").c_str()); |
||||||
|
|
||||||
|
if (!ifs) { |
||||||
|
sLog.Error(LOG_GENERAL, "Failed opening config file: %s", sConfig.Get<std::string>("LogFilePath").c_str()); |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
store(parse_config_file(ifs, fileOptions), sConfig.vm); |
||||||
|
notify(sConfig.vm); |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
int main(int argc, char *argv[]) |
||||||
|
{ |
||||||
|
if (!InitConfig(argc, argv)) |
||||||
|
return 0; |
||||||
|
|
||||||
|
sLog.OpenLogFile(sConfig.Get<std::string>("LogFilePath")); |
||||||
|
sLog.Info(LOG_GENERAL, "LogFile Started: %s", sLog.logFileLoc.c_str()); |
||||||
|
|
||||||
|
Server* server = new Server(); |
||||||
|
int exitcode = server->Run(); |
||||||
|
delete server; |
||||||
|
|
||||||
|
return exitcode; |
||||||
|
} |
@ -0,0 +1,69 @@ |
|||||||
|
#include "Server.h" |
||||||
|
#include "Config.h" |
||||||
|
#include "Log.h" |
||||||
|
#include "Stratum/Server.h" |
||||||
|
|
||||||
|
#include <boost/thread.hpp> |
||||||
|
#include <iostream> |
||||||
|
|
||||||
|
Server::Server() : serverLoops(0) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Server::~Server() |
||||||
|
{ |
||||||
|
//delete stratumServer;
|
||||||
|
} |
||||||
|
|
||||||
|
int Server::Run() |
||||||
|
{ |
||||||
|
sLog.Info(LOG_SERVER, "Server is starting..."); |
||||||
|
|
||||||
|
// Start stratum server
|
||||||
|
sLog.Info(LOG_SERVER, "Starting stratum"); |
||||||
|
//stratumServer = new Stratum::Server(Config::GetString("STRATUM_IP"), Config::GetInt("STRATUM_PORT"));
|
||||||
|
|
||||||
|
// Init loop vars
|
||||||
|
uint32_t sleepDuration = 0; |
||||||
|
int exitcode = 0; |
||||||
|
running = true; |
||||||
|
|
||||||
|
// Init diff
|
||||||
|
uint32_t minDiffTime = sConfig.Get<uint32_t>("MinDiffTime"); |
||||||
|
diffStart = boost::chrono::steady_clock::now(); |
||||||
|
|
||||||
|
sLog.Info(LOG_SERVER, "Server is running!"); |
||||||
|
|
||||||
|
while (running) |
||||||
|
{ |
||||||
|
// Calc time diff
|
||||||
|
boost::chrono::steady_clock::time_point now = boost::chrono::steady_clock::now(); |
||||||
|
uint32_t diff = boost::chrono::duration_cast<boost::chrono::milliseconds>(now - diffStart).count(); |
||||||
|
diffStart = now; |
||||||
|
|
||||||
|
// Update
|
||||||
|
Update(diff); |
||||||
|
|
||||||
|
// Mercy for CPU
|
||||||
|
if (diff < minDiffTime+sleepDuration) { |
||||||
|
sleepDuration = minDiffTime - diff + sleepDuration; |
||||||
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(sleepDuration)); |
||||||
|
} else |
||||||
|
sleepDuration = 0; |
||||||
|
|
||||||
|
++serverLoops; |
||||||
|
|
||||||
|
if (serverLoops > 50) |
||||||
|
running = false; |
||||||
|
//std::cout << "Diff: " << diff << ", Loop: " << serverLoops << std::endl;
|
||||||
|
} |
||||||
|
|
||||||
|
sLog.Info(LOG_SERVER, "Server is stopping..."); |
||||||
|
|
||||||
|
return exitcode; |
||||||
|
} |
||||||
|
|
||||||
|
void Server::Update(uint32_t diff) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
#ifndef SERVER_H |
||||||
|
#define SERVER_H |
||||||
|
|
||||||
|
#include "Stratum/Server.h" |
||||||
|
|
||||||
|
#include <boost/thread.hpp> |
||||||
|
#include <boost/cstdint.hpp> |
||||||
|
#include <boost/chrono.hpp> |
||||||
|
|
||||||
|
#define SERVER_MIN_DIFF 100 |
||||||
|
|
||||||
|
class Server |
||||||
|
{ |
||||||
|
public: |
||||||
|
Server(); |
||||||
|
~Server(); |
||||||
|
|
||||||
|
Stratum::Server* stratumServer; |
||||||
|
|
||||||
|
boost::chrono::steady_clock::time_point diffStart; |
||||||
|
bool running; |
||||||
|
uint64_t serverLoops; |
||||||
|
|
||||||
|
int Run(); |
||||||
|
void Update(uint32_t); |
||||||
|
}; |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,32 @@ |
|||||||
|
|
||||||
|
add_subdirectory(Database) |
||||||
|
|
||||||
|
file(GLOB_RECURSE sources_Configuration Configuration/*.cpp Configuration/*.h) |
||||||
|
file(GLOB_RECURSE sources_Logging Logging/*.cpp Logging/*.h) |
||||||
|
file(GLOB_RECURSE sources_Stratum Stratum/*.cpp Stratum/*.h) |
||||||
|
|
||||||
|
file(GLOB sources_localdir *.cpp *.h) |
||||||
|
|
||||||
|
set(sources_Shared |
||||||
|
${sources_Configuration} |
||||||
|
${sources_Database} |
||||||
|
${sources_Logging} |
||||||
|
${sources_Stratum} |
||||||
|
${sources_localdir} |
||||||
|
) |
||||||
|
|
||||||
|
include_directories( |
||||||
|
${CMAKE_CURRENT_SOURCE_DIR} |
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/Configuration |
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/Database |
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/Logging |
||||||
|
${MYSQL_INCLUDE_DIR} |
||||||
|
) |
||||||
|
|
||||||
|
add_library(shared STATIC |
||||||
|
${sources_Shared} |
||||||
|
) |
||||||
|
|
||||||
|
target_link_libraries(shared |
||||||
|
${ACE_LIBRARY} |
||||||
|
) |
@ -0,0 +1,15 @@ |
|||||||
|
#include "Config.h" |
||||||
|
#include "Log.h" |
||||||
|
|
||||||
|
#include <fstream> |
||||||
|
#include <iostream> |
||||||
|
|
||||||
|
Config sConfig; |
||||||
|
|
||||||
|
Config::Config() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Config::~Config() |
||||||
|
{ |
||||||
|
} |
@ -0,0 +1,28 @@ |
|||||||
|
#ifndef CONFIG_H |
||||||
|
#define CONFIG_H |
||||||
|
|
||||||
|
#include <cassert> |
||||||
|
#include <cstring> |
||||||
|
#include <boost/program_options.hpp> |
||||||
|
#include <boost/cstdint.hpp> |
||||||
|
|
||||||
|
class Config |
||||||
|
{ |
||||||
|
public: |
||||||
|
Config(); |
||||||
|
~Config(); |
||||||
|
|
||||||
|
// Reading
|
||||||
|
template<class T> |
||||||
|
T Get(std::string key) |
||||||
|
{ |
||||||
|
return vm[key].as<T>(); |
||||||
|
} |
||||||
|
|
||||||
|
// Containers
|
||||||
|
boost::program_options::variables_map vm; |
||||||
|
}; |
||||||
|
|
||||||
|
extern Config sConfig; |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,15 @@ |
|||||||
|
|
||||||
|
file(GLOB sources_MySQL MySQL/*.cpp MySQL/*.h) |
||||||
|
file(GLOB sources_localdir *.cpp *.h) |
||||||
|
|
||||||
|
set(sources_Database |
||||||
|
${sources_localdir} |
||||||
|
) |
||||||
|
|
||||||
|
if(MYSQL) |
||||||
|
set(sources_Database |
||||||
|
${sources_Database} |
||||||
|
${sources_MySQL} |
||||||
|
${MYSQL_INCLUDE_DIR} |
||||||
|
) |
||||||
|
endif() |
@ -0,0 +1,33 @@ |
|||||||
|
#ifndef DATABASE_H |
||||||
|
#define DATABASE_H |
||||||
|
|
||||||
|
class Database; |
||||||
|
class ResultSet; |
||||||
|
class Fields; |
||||||
|
class PreparedStatement; |
||||||
|
|
||||||
|
enum PreparedStatementEnum |
||||||
|
{ |
||||||
|
STMT_INSERT_SHARE = 1, |
||||||
|
}; |
||||||
|
|
||||||
|
class Database |
||||||
|
{ |
||||||
|
public: |
||||||
|
|
||||||
|
// Ping!
|
||||||
|
virtual Ping(); |
||||||
|
|
||||||
|
// Queries
|
||||||
|
virtual void Execute(const char* query); |
||||||
|
virtual void Execute(PreparedStatement* stmt); |
||||||
|
virtual ResultSet* Query(const char* query); |
||||||
|
virtual ResultSet* Query(PreparedStatement* stmt); |
||||||
|
|
||||||
|
// Prepared Statements
|
||||||
|
virtual PreparedStatement* GetPreparedStatement(PreparedStatementEnum smtid); |
||||||
|
|
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,116 @@ |
|||||||
|
#include "Log.h" |
||||||
|
#include "Config.h" |
||||||
|
#include "Util.h" |
||||||
|
|
||||||
|
Log sLog; |
||||||
|
|
||||||
|
Log::Log(): logfile(NULL) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Log::~Log() |
||||||
|
{ |
||||||
|
if (logfile) |
||||||
|
logfile.close(); |
||||||
|
} |
||||||
|
|
||||||
|
void Log::Error(LogType type, const char * str, ...) |
||||||
|
{ |
||||||
|
va_list ap; |
||||||
|
va_start(ap, str); |
||||||
|
|
||||||
|
char text[MAX_MSG_LEN]; |
||||||
|
vsnprintf(text, MAX_MSG_LEN, str, ap); |
||||||
|
Write(LOG_LEVEL_ERROR, type, std::string(text)); |
||||||
|
|
||||||
|
va_end(ap); |
||||||
|
} |
||||||
|
|
||||||
|
void Log::Warn(LogType type, const char * str, ...) |
||||||
|
{ |
||||||
|
va_list ap; |
||||||
|
va_start(ap, str); |
||||||
|
|
||||||
|
char text[MAX_MSG_LEN]; |
||||||
|
vsnprintf(text, MAX_MSG_LEN, str, ap); |
||||||
|
Write(LOG_LEVEL_WARN, type, std::string(text)); |
||||||
|
|
||||||
|
va_end(ap); |
||||||
|
} |
||||||
|
|
||||||
|
void Log::Info(LogType type, const char * str, ...) |
||||||
|
{ |
||||||
|
va_list ap; |
||||||
|
va_start(ap, str); |
||||||
|
|
||||||
|
char text[MAX_MSG_LEN]; |
||||||
|
vsnprintf(text, MAX_MSG_LEN, str, ap); |
||||||
|
Write(LOG_LEVEL_INFO, type, std::string(text)); |
||||||
|
|
||||||
|
va_end(ap); |
||||||
|
} |
||||||
|
|
||||||
|
void Log::Debug(LogType type, const char * str, ...) |
||||||
|
{ |
||||||
|
va_list ap; |
||||||
|
va_start(ap, str); |
||||||
|
|
||||||
|
char text[MAX_MSG_LEN]; |
||||||
|
vsnprintf(text, MAX_MSG_LEN, str, ap); |
||||||
|
Write(LOG_LEVEL_DEBUG, type, std::string(text)); |
||||||
|
|
||||||
|
va_end(ap); |
||||||
|
} |
||||||
|
|
||||||
|
void Log::OpenLogFile(std::string path) |
||||||
|
{ |
||||||
|
if (!logfile) { |
||||||
|
logFileLoc = path + "/server-" + Util::Date("%Y%m%d-%H%M%S") + ".log"; |
||||||
|
logfile.open(logFileLoc.c_str()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void Log::Write(LogLevel level, LogType type, std::string msg) |
||||||
|
{ |
||||||
|
switch(level) |
||||||
|
{ |
||||||
|
case LOG_LEVEL_ERROR: |
||||||
|
if (sConfig.Get<uint32_t>("LogConsoleLevel") >= level) |
||||||
|
std::cout << "[ERROR] " << msg << std::endl; |
||||||
|
if (sConfig.Get<uint32_t>("LogFileLevel") >= level) |
||||||
|
AppendFile("[ERROR] " + msg); |
||||||
|
break; |
||||||
|
case LOG_LEVEL_WARN: |
||||||
|
if (sConfig.Get<uint32_t>("LogConsoleLevel") >= level) |
||||||
|
std::cout << "[WARN] " << msg << std::endl; |
||||||
|
if (sConfig.Get<uint32_t>("LogFileLevel") >= level) |
||||||
|
AppendFile("[WARN] " + msg); |
||||||
|
break; |
||||||
|
case LOG_LEVEL_INFO: |
||||||
|
if (sConfig.Get<uint32_t>("LogConsoleLevel") >= level) |
||||||
|
std::cout << "[INFO] " << msg << std::endl; |
||||||
|
if (sConfig.Get<uint32_t>("LogFileLevel") >= level) |
||||||
|
AppendFile("[INFO] " + msg); |
||||||
|
break; |
||||||
|
case LOG_LEVEL_DEBUG: |
||||||
|
if (sConfig.Get<uint32_t>("LogConsoleLevel") >= level) { |
||||||
|
uint32_t debugmask = sConfig.Get<uint32_t>("LogConsoleDebugMask"); |
||||||
|
if (debugmask & uint32_t(pow(2, type))) |
||||||
|
std::cout << "[DEBUG] " << msg << std::endl; |
||||||
|
} |
||||||
|
if (sConfig.Get<uint32_t>("LogFileLevel") >= level) { |
||||||
|
uint32_t debugmask = sConfig.Get<uint32_t>("LogFileDebugMask"); |
||||||
|
if (debugmask & uint32_t(pow(2, type))) |
||||||
|
AppendFile("[DEBUG] " + msg); |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
void Log::AppendFile(std::string msg) |
||||||
|
{ |
||||||
|
if (!logfile) |
||||||
|
return; |
||||||
|
|
||||||
|
logfile << msg << std::endl; |
||||||
|
} |
@ -0,0 +1,53 @@ |
|||||||
|
#ifndef LOG_H |
||||||
|
#define LOG_H |
||||||
|
|
||||||
|
#include <string> |
||||||
|
#include <fstream> |
||||||
|
#include <iostream> |
||||||
|
#include <cmath> |
||||||
|
#include <cstdarg> |
||||||
|
#include <boost/cstdint.hpp> |
||||||
|
|
||||||
|
#define MAX_MSG_LEN 32*1024 |
||||||
|
#define ATTR_PRINTF(F, V) __attribute__ ((format (printf, F, V))) |
||||||
|
|
||||||
|
enum LogType |
||||||
|
{ |
||||||
|
LOG_GENERAL = 0, |
||||||
|
LOG_SERVER = 2, |
||||||
|
}; |
||||||
|
|
||||||
|
enum LogLevel |
||||||
|
{ |
||||||
|
LOG_LEVEL_NONE = 0, |
||||||
|
LOG_LEVEL_ERROR = 1, |
||||||
|
LOG_LEVEL_WARN = 2, |
||||||
|
LOG_LEVEL_INFO = 3, |
||||||
|
LOG_LEVEL_DEBUG = 4 |
||||||
|
}; |
||||||
|
|
||||||
|
class Log |
||||||
|
{ |
||||||
|
public: |
||||||
|
Log(); |
||||||
|
~Log(); |
||||||
|
|
||||||
|
void Error(LogType type, const char * str, ...) ATTR_PRINTF(3, 4); |
||||||
|
void Warn(LogType type, const char * str, ...) ATTR_PRINTF(3, 4); |
||||||
|
void Info(LogType type, const char * str, ...) ATTR_PRINTF(3, 4); |
||||||
|
void Debug(LogType type, const char * str, ...) ATTR_PRINTF(3, 4); |
||||||
|
|
||||||
|
void OpenLogFile(std::string filename); |
||||||
|
std::string logFileLoc; |
||||||
|
|
||||||
|
private: |
||||||
|
void Write(LogLevel level, LogType type, std::string msg); |
||||||
|
void AppendFile(std::string); |
||||||
|
|
||||||
|
std::string logfileloc; |
||||||
|
std::ofstream logfile; |
||||||
|
}; |
||||||
|
|
||||||
|
extern Log sLog; |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,2 @@ |
|||||||
|
# Add sources |
||||||
|
file(GLOB sources_stratum *.cpp *.h) |
@ -0,0 +1,6 @@ |
|||||||
|
#include "Server.h" |
||||||
|
|
||||||
|
Stratum::Server::Server(std::string ip, uint32_t port) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
@ -0,0 +1,20 @@ |
|||||||
|
#ifndef STRATUM_SERVER_H |
||||||
|
#define STRATUM_SERVER_H |
||||||
|
|
||||||
|
#include <boost/cstdint.hpp> |
||||||
|
#include <string> |
||||||
|
|
||||||
|
namespace Stratum |
||||||
|
{ |
||||||
|
class Server |
||||||
|
{ |
||||||
|
public: |
||||||
|
Server(std::string ip, uint32_t port); |
||||||
|
~Server(); |
||||||
|
|
||||||
|
private: |
||||||
|
|
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
@ -0,0 +1,27 @@ |
|||||||
|
#ifndef UTIL_H |
||||||
|
#define UTIL_H |
||||||
|
|
||||||
|
#include <sstream> |
||||||
|
#include <iostream> |
||||||
|
#include <boost/date_time.hpp> |
||||||
|
|
||||||
|
namespace Util |
||||||
|
{ |
||||||
|
std::string Date(const char* format, bool utc = false) |
||||||
|
{ |
||||||
|
boost::posix_time::ptime now; |
||||||
|
if (utc) |
||||||
|
now = boost::posix_time::second_clock::universal_time(); |
||||||
|
else |
||||||
|
now = boost::posix_time::second_clock::local_time(); |
||||||
|
|
||||||
|
std::stringstream ss; |
||||||
|
boost::posix_time::time_facet *facet = new boost::posix_time::time_facet(format); |
||||||
|
ss.imbue(std::locale(std::cout.getloc(), facet)); |
||||||
|
ss << now; |
||||||
|
|
||||||
|
return ss.str(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue