diff --git a/MMOTestServer/MMOserver/Api/RestApi.cs b/MMOTestServer/MMOserver/Api/RestApi.cs index 98132c3..97ee7ca 100644 --- a/MMOTestServer/MMOserver/Api/RestApi.cs +++ b/MMOTestServer/MMOserver/Api/RestApi.cs @@ -135,13 +135,13 @@ public class RestApi : Singleton // 성공 시 BossRaidResult 반환, 실패/거절 시 null 반환 public async Task BossRaidAccesssAsync(List userNames, int bossId) { - string url = AppConfig.RestApi.BaseUrl + "/api/internal/bossraid/entry"; + string url = AppConfig.RestApi.BaseUrl + AppConfig.RestApi.BossRaidAccess; for (int attempt = 1; attempt <= MAX_RETRY; attempt++) { try { - HttpResponseMessage response = await httpClient.PostAsJsonAsync(url, new { usernames = userNames, bossId }); + HttpResponseMessage response = await httpClient.PostAsJsonAsync(url, new { usernames = userNames, bossId = bossId }); // 401: API 키 인증 실패 if (response.StatusCode == HttpStatusCode.Unauthorized) @@ -232,6 +232,6 @@ public class RestApi : Singleton { get; set; - } + } = new(); } } diff --git a/MMOTestServer/MMOserver/Config/AppConfig.cs b/MMOTestServer/MMOserver/Config/AppConfig.cs index f93fad7..5009eb0 100644 --- a/MMOTestServer/MMOserver/Config/AppConfig.cs +++ b/MMOTestServer/MMOserver/Config/AppConfig.cs @@ -30,9 +30,15 @@ public sealed class ServerConfig get; } + public int ChannelCount + { + get; + } + public ServerConfig(IConfigurationSection section) { Port = int.Parse(section["Port"] ?? throw new InvalidOperationException("Server:Port is required in config.json")); + ChannelCount = int.Parse(section["ChannelCount"] ?? "1"); } } @@ -48,6 +54,11 @@ public sealed class RestApiConfig get; } + public string BossRaidAccess + { + get; + } + public string ApiKey { get; @@ -57,6 +68,7 @@ public sealed class RestApiConfig { BaseUrl = section["BaseUrl"] ?? throw new InvalidOperationException("RestApi:BaseUrl is required in config.json"); VerifyToken = section["VerifyToken"] ?? throw new InvalidOperationException("RestApi:BaseUrl is required in config.json"); + BossRaidAccess = section["BossRaidAccess"] ?? throw new InvalidOperationException("RestApi:BaseUrl is required in config.json"); ApiKey = section["ApiKey"] ?? throw new InvalidOperationException("RestApi:ApiKey is required in config.json"); } } diff --git a/MMOTestServer/MMOserver/Game/Channel/ChannelManager.cs b/MMOTestServer/MMOserver/Game/Channel/ChannelManager.cs index 3e6e6a8..905535a 100644 --- a/MMOTestServer/MMOserver/Game/Channel/ChannelManager.cs +++ b/MMOTestServer/MMOserver/Game/Channel/ChannelManager.cs @@ -1,4 +1,5 @@ using LiteNetLib; +using MMOserver.Config; using MMOserver.Utils; namespace MMOserver.Game.Channel; @@ -8,16 +9,12 @@ public class ChannelManager : Singleton // 채널 관리 private Dictionary channels = new Dictionary(); - // 보스 레이드 채널 - private readonly int bossChannelStart = 10000; - private readonly int bossChannelSize = 10; - // 채널별 유저 관리 (유저 key, 채널 val) private Dictionary connectUsers = new Dictionary(); public ChannelManager() { - Initializer(); + Initializer(AppConfig.Server.ChannelCount); } public void Initializer(int channelSize = 1) @@ -26,13 +23,6 @@ public class ChannelManager : Singleton { channels.Add(i, new Channel(i)); } - - // 보스 채널 생성 - for (int i = 1; i <= bossChannelSize; i++) - { - int bossChannel = i + bossChannelStart; - channels.Add(bossChannel, new Channel(bossChannel)); - } } public Channel GetChannel(int channelId) diff --git a/MMOTestServer/MMOserver/Game/GameServer.cs b/MMOTestServer/MMOserver/Game/GameServer.cs index 4388dd1..0c8dfed 100644 --- a/MMOTestServer/MMOserver/Game/GameServer.cs +++ b/MMOTestServer/MMOserver/Game/GameServer.cs @@ -122,7 +122,7 @@ public class GameServer : ServerBase { // 신규 연결: 웹서버에 JWT 검증 요청 string? username = await RestApi.Instance.VerifyTokenAsync(token); - if (username == null) + if (username == null || username.Trim().Length <= 0) { Log.Warning("[Server] 토큰 검증 실패 - 연결 거부 PeerId={Id}", peer.Id); userUuidGenerator.Release(hashKey); @@ -1114,7 +1114,11 @@ public class GameServer : ServerBase List userNames = new List(); foreach (int memberId in party.PartyMemberIds) { - userNames.Add(channel.GetPlayer(memberId).Nickname); + Player? memberPlayer = channel.GetPlayer(memberId); + if (memberPlayer != null) + { + userNames.Add(memberPlayer.Nickname); + } } BossRaidResult? result = await RestApi.Instance.BossRaidAccesssAsync(userNames, 1); diff --git a/MMOTestServer/MMOserver/config.json b/MMOTestServer/MMOserver/config.json index 569a4d8..16f27fd 100644 --- a/MMOTestServer/MMOserver/config.json +++ b/MMOTestServer/MMOserver/config.json @@ -1,10 +1,12 @@ { "Server": { - "Port": 9500 + "Port": 9500, + "ChannelCount": 5 }, "RestApi": { "BaseUrl": "https://a301.api.tolelom.xyz", "VerifyToken": "/api/internal/auth/verify", + "BossRaidAccess": "/api/internal/bossraid/entry", "ApiKey": "017f15b28143fc67d2e5bed283c37d2da858b9f294990a5334238e055e3f5425" }, "Database": {