XNet/XNet.Business/Tank/Manager/ActionManager.cs
2025-12-31 18:29:29 +08:00

62 lines
2.3 KiB
C#

using System.Collections.Concurrent;
using XNet.Business.Manager;
using XNet.Business.Net;
using XNet.Business.PathNavigation;
namespace XNet.Business.Tank.Manager
{
public class ActionManager
{
private readonly ConcurrentDictionary<WsMsgType, Func<string, byte[], Task>> Actions = new();
private readonly PlayerManager _playerManager;
private readonly WsConnectionManager _wsManager;
private readonly NavMeshManager _navMeshManager;
private readonly SceneAgent _sceneAgent;
private readonly SceneManager _sceneManager;
public ActionManager(WsConnectionManager wsManager, NavMeshManager navMeshManager, SceneAgent sceneAgent)
{
_navMeshManager = navMeshManager;
_wsManager = wsManager;
_sceneAgent = sceneAgent;
_sceneManager = new SceneManager(wsManager);
_playerManager = new PlayerManager(wsManager, navMeshManager, sceneAgent);
Init();
}
public void Init()
{
Actions[WsMsgType.SUBSCRIBE_ROOM] = _playerManager.SubcribeRoom;
Actions[WsMsgType.CHANGE_ROOM_KEY_NAME] = _playerManager.ChangeRoomKey;
Actions[WsMsgType.CREATE_OR_JOIN_ROOM] = _playerManager.CreateOrJoinRoom;
Actions[WsMsgType.ROOM_MSG_OTHER] = _playerManager.SendMessageToRoomOthers;
Actions[WsMsgType.ROOM_MSG] = _playerManager.SendMessageToRoom;
Actions[WsMsgType.TO_SELF] = _playerManager.SendMessageToSelf;
Actions[WsMsgType.LOGIN] = _playerManager.Login;
Actions[WsMsgType.REQUEST_PATH] = _playerManager.RequestPath;
Actions[WsMsgType.REQUEST_INIT] = _playerManager.RequestInit;
Actions[WsMsgType.GET_ROOM_FOR_START] = _sceneManager.GetRoomForStart;
Actions[WsMsgType.LEAVE_ROOM] = _sceneManager.LeaveRoom;
Actions[WsMsgType.LOCK_TARGET] = _playerManager.LockTarget;
}
public async Task ExecuteAction(WsMsgType msgType, string connId, byte[] data)
{
if (Actions.TryGetValue(msgType, out var action))
{
await action(connId, data);
}
//else
//{
// Console.WriteLine($"[ActionManager] 未找到对应的动作处理:{msgType}");
//}
}
}
}