59 lines
1.9 KiB
C++
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;
|
|
}
|