using GameServer.Contents.GameMode.Helper; using GameServer.Contents.GameMode.Manage; using GameServer.Contents.GameMode.Manage.PlayManage; using ServerBase; using ServerCommon; using ServerCore; namespace GameServer; public abstract class GameModeInitHandlerBase : IGameModeInitHandler { protected readonly GameModeType m_game_mode_type; protected readonly InstanceRoom m_instance_room; public GameModeInitHandlerBase(InstanceRoom instanceRoom, GameModeType gameModeType) { m_instance_room = instanceRoom; m_game_mode_type = gameModeType; } public abstract Result gamedModeInstanceInitValidate(); public virtual async Task gamedModeInstanceInit() { var result = await GameModeManager.It.createGameMode(m_instance_room, m_game_mode_type); //kihoon todo : 이렇게 짜는게 맞는지...고민좀 해보자 if (result.isFail()) return result; var room_id = m_instance_room.getMap().m_room_id; if(false == GameModeManager.It.tryGetGameMode(room_id, out var gameMode)) { var err_msg = $"game_mode is null !!!! gameModeType : {m_game_mode_type}, instanceRoomId : {room_id}"; Log.getLogger().error(err_msg); result.setFail(ServerErrorCode.GameModeClassIsNull, err_msg); return result; } var initializer = gameMode as IInitializer; NullReferenceCheckHelper.throwIfNull(initializer, () => $"initializer is null !!! casting error"); var gamd_mod_base = gameMode as GameModeBase; NullReferenceCheckHelper.throwIfNull(gamd_mod_base, () => $"gamd_mod_base is null !!! casting error"); //모드별로 필요한 내용 초기화 using (var releaser = await gamd_mod_base.getAsyncLock()) { if (gamd_mod_base.isLoadCompleted()) return result; result = await initializer.onInit(); if (result.isFail()) return result; } return result; } }