250501 커밋
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
using GameServer.Contents.GameMode.Manage.PlayManage;
|
||||
using ServerBase;
|
||||
using ServerCommon;
|
||||
using ServerCore;
|
||||
|
||||
namespace GameServer.Contents.GameMode.Manage.LeaveManage;
|
||||
|
||||
public abstract class GameModeDestroyHandlerBase : IGameModeDestroyHandler
|
||||
{
|
||||
protected readonly GameModeType m_game_mode_type;
|
||||
protected string m_room_id;
|
||||
protected IGameMode? m_game_mode;
|
||||
|
||||
public GameModeDestroyHandlerBase(string roomId, GameModeType gameModeType)
|
||||
{
|
||||
m_game_mode_type = gameModeType;
|
||||
m_room_id = roomId;
|
||||
}
|
||||
|
||||
public abstract Task<Result> postDestroy(IGameMode gameMode);
|
||||
|
||||
public async Task<Result> gameModeDestroy()
|
||||
{
|
||||
var result = new Result();
|
||||
if (false == GameModeManager.It.tryGetGameMode(m_room_id, out var gameMode))
|
||||
{
|
||||
var err_msg = $"game_mode is null !!!! gameModeType : {m_game_mode_type}, instanceRoomId : {m_room_id}";
|
||||
Log.getLogger().error(err_msg);
|
||||
result.setFail(ServerErrorCode.GameModeClassIsNull, err_msg);
|
||||
return result;
|
||||
}
|
||||
|
||||
var game_mode_base = gameMode as GameModeBase;
|
||||
NullReferenceCheckHelper.throwIfNull(game_mode_base, () => $"game_mode_base is null !!! casting error");
|
||||
|
||||
using (var releaser = await game_mode_base.getAsyncLock())
|
||||
{
|
||||
var ticker = game_mode_base.getEntityTicker();
|
||||
if (ticker is not null)
|
||||
{
|
||||
try
|
||||
{
|
||||
ticker.cancel();
|
||||
ticker = null;
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
var err_msg = $"Exception !!!, Failed to cancel ||| : Exception:{e}";
|
||||
Log.getLogger().debug(err_msg);
|
||||
}
|
||||
}
|
||||
|
||||
//모드별 destroy 처리
|
||||
await postDestroy(gameMode);
|
||||
|
||||
if (false == GameModeManager.It.tryRemoveGameMode(m_room_id, out var _))
|
||||
{
|
||||
var err_msg = $"game_mode is null !!!! gameModeType : {m_game_mode_type}, instanceRoomId : {m_room_id}";
|
||||
Log.getLogger().warn(err_msg);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user