using Microsoft.AspNetCore.SignalR.Client; using OpenIddict.Client; using RobotNet.MapShares.Dtos; using RobotNet.Shares; namespace RobotNet.RobotManager.HubClients; public class MapHubClient(IHttpClientFactory HttpFactory, OpenIddictClientService openIddictClient) : OpenIddictHubClient(new Uri($"{HttpFactory.CreateClient("MapManagerAPI").BaseAddress}hubs/map/data").ToString(), openIddictClient, ["robotnet-map-api"]) { public event Action? MapUpdated; private IDisposable? disMapUpdated; new public async Task StartAsync() { disMapUpdated = Connection.On("MapUpdated", mapId => MapUpdated?.Invoke(mapId)); await base.StartAsync(); } new public async Task StopAsync() { if (disMapUpdated != null) { disMapUpdated.Dispose(); disMapUpdated = null; } await base.StopAsync(); } public async Task> GetMapData(Guid mapId) => IsConnected ? await Connection.InvokeAsync>(nameof(GetMapData), mapId) : new(false, "Kết nối thất bại"); public async Task> GetElementsState(Guid mapId) => IsConnected ? await Connection.InvokeAsync>(nameof(GetElementsState), mapId) : new(false, "Kết nối thất bại"); public async Task> GetMapInfoByName(string name) => IsConnected ? await Connection.InvokeAsync>(nameof(GetMapInfoByName), name) : new(false, "Kết nối thất bại"); public async Task> GetMapInfoById(Guid mapId) => IsConnected ? await Connection.InvokeAsync>(nameof(GetMapInfoById), mapId) : new(false, "Kết nối thất bại"); }