71 lines
2.4 KiB
C#
71 lines
2.4 KiB
C#
using System.Collections.Concurrent;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using GameServer.Contents.GameMode.Helper;
|
|
using GameServer.Contents.GameMode.Manage.PlayManage;
|
|
using ServerCore;
|
|
using NeoSmart.AsyncLock;
|
|
using ServerBase;
|
|
using ServerCommon;
|
|
|
|
namespace GameServer;
|
|
|
|
public class GameModeManager : Singleton<GameModeManager>
|
|
{
|
|
private AsyncLock m_lock = new();
|
|
private ConcurrentDictionary<string, IGameMode> m_game_modes = new(); /**/
|
|
|
|
public async Task onInit()
|
|
{
|
|
//1. 이벤트 관리하는 Task 추가
|
|
//var result = await createBattleEventCheckerTask(); //kihoon todo : 이부분은 GameModeEventCheckerTask라는 걸로 변경 처리 해준다. 여기서 처리 안해줄수 도 있다.
|
|
await Task.CompletedTask;
|
|
}
|
|
|
|
|
|
public async Task<Result> createGameMode(InstanceRoom instanceRoom, GameModeType gameModeType)
|
|
{
|
|
(var result, var game_mode) = GameModeHelper.createGameMode(instanceRoom, gameModeType);
|
|
if (result.isFail()) return result;
|
|
if (game_mode is null)
|
|
{
|
|
var err_msg = $"game_mode is null !!!! gameModeType : {gameModeType}, instanceRoomId : {instanceRoom.getMap().m_room_id}";
|
|
Log.getLogger().error(err_msg);
|
|
result.setFail(ServerErrorCode.GameModeClassIsNull, err_msg);
|
|
return result;
|
|
}
|
|
var room_id = instanceRoom.getMap().m_room_id;
|
|
|
|
if (false == tryAdd(room_id, game_mode))
|
|
{
|
|
//이미 들어가져 있으므로 로그만 남겨놓고 리턴
|
|
Log.getLogger().warn($"game_mode already exist...... gameModeType : {gameModeType}, instanceRoomId : {instanceRoom.getMap().m_room_id}");
|
|
}
|
|
|
|
await Task.CompletedTask;
|
|
return result;
|
|
}
|
|
|
|
public bool tryGetGameMode(string roomId, [MaybeNullWhen(false)] out IGameMode gameMode)
|
|
{
|
|
var ret = m_game_modes.TryGetValue(roomId, out gameMode);
|
|
|
|
if (ret == false)
|
|
{
|
|
var err_msg = $"gameMode is null : room_id - {roomId}";
|
|
Log.getLogger().error(err_msg);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
public bool tryRemoveGameMode(string roomId, [MaybeNullWhen(false)] out IGameMode gameMode)
|
|
{
|
|
return m_game_modes.TryRemove(roomId, out gameMode);
|
|
}
|
|
|
|
public bool tryAdd(string roomId, IGameMode gameMode)
|
|
{
|
|
return m_game_modes.TryAdd(roomId, gameMode);
|
|
}
|
|
|
|
} |