sword_game/server/main.cpp

59 lines
1.9 KiB
C++

#include "DatabaseManager.h"
#include "Logger.h"
#include "NetworkService.h"
#include <csignal>
int main() {
try {
uint16_t port = 30000;
uint32_t threadCount = std::thread::hardware_concurrency();
if (threadCount == 0)
threadCount = 1;
boost::asio::io_context main_context;
// 환경 변수에서 DB 설정 읽기
const char *env_db_host = std::getenv("DB_HOST");
const char *env_db_port = std::getenv("DB_PORT");
const char *env_db_user = std::getenv("DB_USER");
const char *env_db_pass = std::getenv("DB_PASSWORD");
const char *env_db_name = std::getenv("DB_NAME");
std::string db_host = env_db_host ? env_db_host : "127.0.0.1";
uint16_t db_port =
env_db_port ? static_cast<uint16_t>(std::stoi(env_db_port)) : 33306;
std::string db_user = env_db_user ? env_db_user : "root";
std::string db_pass = env_db_pass ? env_db_pass : "root_password";
std::string db_name = env_db_name ? env_db_name : "socket_server";
if (!DatabaseManager::GetInstance().Init(main_context, db_host, db_port,
db_user, db_pass, db_name)) {
Logger::Log("DB 연결에 실패했습니다.");
return 1;
}
NetworkService server(main_context, port, threadCount);
server.Run();
boost::asio::signal_set signals(main_context, SIGINT, SIGTERM);
Logger::Log("서버가 실행 중입니다. (종료: Ctrl+C)");
signals.async_wait(
[&server, &main_context](const boost::system::error_code &error,
int signal_number) {
if (!error) {
Logger::Log("\n종료 시그널 수신 (", signal_number,
"). 서버를 중지합니다...");
server.Stop();
main_context.stop();
}
});
main_context.run();
} catch (std::exception &e) {
Logger::Log("Exception: ", e.what());
}
return 0;
}