Files
a301_mmo_game_server/MMOTestServer/MMOserver/Program.cs
2026-03-16 11:14:38 +09:00

76 lines
2.1 KiB
C#

using Microsoft.Extensions.Configuration;
using MMOserver.Config;
using MMOserver.Game;
using MMOserver.RDB;
using Serilog;
using ServerLib.Utils;
namespace MMOserver;
class Program
{
private static async Task Main()
{
// 크래시 덤프 핸들러 (Release: .log + .dmp / Debug: .log)
CrashDumpHandler.Register();
// .MinimumLevel.Warning() // Warning 이상만 출력 배포시
IConfigurationRoot config = new ConfigurationBuilder()
.SetBasePath(AppContext.BaseDirectory)
.AddJsonFile("config.json", optional: true) // 로컬 개발용
.AddEnvironmentVariables() // 도커 배포용
.Build();
AppConfig.Initialize(config);
// DB 연결
// DbConnectionFactory dbFactory = new DbConnectionFactory(config);
string timestamp = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss");
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File($"logs/log_{timestamp}.txt")
.CreateLogger();
Log.Information("Write Log Started");
int port = AppConfig.Server.Port;
string connectionString = "test";
GameServer gameServer = new GameServer(port, connectionString);
// Ctrl+C → Stop() 호출 → Run() 루프 탈출 → serverThread 종료
Console.CancelKeyPress += (_, e) =>
{
// 프로세스 즉시 종료 막기
e.Cancel = true;
gameServer.Stop();
};
// 게임 서버 스레드 생성
// Thread serverThread = new Thread(() =>
// {
// gameServer.Init();
// gameServer.Run();
// });
// 게임 서버 스레드 시작
// serverThread.Start();
// Run()이 끝날 때까지 대기
// serverThread.Join();
// 비동기 변경
await Task.Run(async () =>
{
gameServer.Init();
await gameServer.Run();
});
// Log 종료
Log.CloseAndFlush();
}
}