- ARepository 전체 메서드 IDbConnection using 추가 (커넥션 풀 누수) - GameServer NotImplementedException → 로그 출력으로 변경 - ServerBase Auth/Echo payload 길이 검증 주석 해제 - PacketSerializer MemoryStream using 추가 (양쪽 솔루션) - PacketSerializer size 파라미터 제거, 자동 계산 + size 검증 구현 - ServerBase NetDataWriter cachedWriter 재사용 (GC 압력 감소) - ServerBase isListening volatile 추가 - ServerBase Deserialize 실패 시 null payload 체크 - ServerBase Serilog 구조적 로깅 템플릿 구문 수정 - TestHandler 전체 메서드 try-catch 추가 - TestRepository IDbConnectionFactory 인터페이스로 변경 - DummyClients BodyLength 계산 불일치 수정 - DummyClients pendingPings 메모리 누수 방지 - EchoClientTester async void 이벤트 → 동기 Cancel()로 변경 - ANALYSIS.md 코드 분석 및 문제점 보고서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
46 lines
1.4 KiB
C#
46 lines
1.4 KiB
C#
using ClientTester.EchoDummyService;
|
|
using Serilog;
|
|
|
|
class EcoClientTester
|
|
{
|
|
public static readonly string SERVER_IP = "tolelom.xyz";
|
|
public static readonly int SERVER_PORT = 9500;
|
|
public static readonly string CONNECTION_KEY = "test";
|
|
public static readonly int CLIENT_COUNT = 100;
|
|
|
|
private static async Task Main(string[] args)
|
|
{
|
|
// .MinimumLevel.Warning() // Warning 이상만 출력 배포시
|
|
|
|
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();
|
|
|
|
CancellationTokenSource cts = new CancellationTokenSource();
|
|
Console.CancelKeyPress += (_, e) =>
|
|
{
|
|
e.Cancel = true;
|
|
Log.Warning("[SHUTDOWN] Ctrl+C 감지, 종료 중...");
|
|
cts.Cancel();
|
|
};
|
|
|
|
DummyClientService service = new DummyClientService(CLIENT_COUNT, SERVER_IP, SERVER_PORT, CONNECTION_KEY, 100);
|
|
service.OnAllDisconnected += () =>
|
|
{
|
|
Log.Warning("[SHUTDOWN] 종료 이벤트 발생, 종료 중...");
|
|
cts.Cancel();
|
|
};
|
|
|
|
await service.RunAsync(cts.Token);
|
|
|
|
service.PrintStats();
|
|
service.Stop();
|
|
|
|
await Log.CloseAndFlushAsync();
|
|
}
|
|
}
|