62 lines
2.3 KiB
C#
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}");
|
|
//}
|
|
}
|
|
}
|
|
}
|