12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- using Microsoft.AspNetCore.Http.Features;
- using SqlSugarORM;
- namespace EEMSServerCore.Hubs;
- internal partial class ClientsMainHub(DeviceManager deviceManager, IEEMSBaseServerProvider provider, SqlSugarCustom orm, IUIProvider uiCaller) : Hub, IClientCaller
- {
- public override Task OnConnectedAsync()
- {
- if (Context.Features.Get<IHttpConnectionFeature>() is IHttpConnectionFeature feature)
- provider?.OnConnected(feature.RemoteIpAddress!.ToString(), (ushort)feature.RemotePort, ServiceHub.ClinetHub);
- if (deviceManager.TryGetDevice(Context.ConnectionId, out DeviceInfo? device) && device is not null && device.Guid is not null)
- uiCaller.OnlineStatusNotify(device.Guid.Value, true);
- return base.OnConnectedAsync();
- }
- public override Task OnDisconnectedAsync(Exception? exception)
- {
- deviceManager.RemoveDevice(Context.ConnectionId, out DeviceInfo? device);
- if (device is not null && device.Guid.HasValue)
- {
- ClientManager.DeviceClients.TryRemove(device.Guid.Value, out _);
- uiCaller.OnlineStatusNotify(device.Guid.Value, false);
- }
- if (Context.Features.Get<IHttpConnectionFeature>() is IHttpConnectionFeature feature)
- provider?.OnDisConnected(feature.RemoteIpAddress!.ToString(), (ushort)feature.RemotePort, ServiceHub.ClinetHub);
- return base.OnDisconnectedAsync(exception);
- }
- public Task<Guid> RegisterDevice(DeviceInfo deviceInfo)
- {
- deviceInfo.IP ??= string.Empty;
- bool newDevice = (deviceInfo.Guid is null || deviceInfo.Guid == Guid.Empty);
- deviceInfo.Guid ??= Guid.NewGuid();
- if (!orm.AddOrUpdate("Devices", deviceInfo, t => t.Guid == deviceInfo.Guid))
- return Task.FromResult(Guid.Empty);
- deviceManager.LoginDevice(Context.ConnectionId, deviceInfo);
- ClientManager.DeviceClients[deviceInfo.Guid.Value] = Clients.Caller;
- if (newDevice)
- uiCaller.InsertNewDevice(deviceInfo);
- else
- uiCaller.UpdateDevice(deviceInfo);
- return Task.FromResult(deviceInfo.Guid.Value);
- }
- public Task<bool> UpdateRealTimeData(Dictionary<string, object> realtimeData)
- {
- if (!deviceManager.TryGetDevice(Context.ConnectionId, out DeviceInfo? device) || device is null || device.Guid is null)
- return Task.FromResult(false);
- return uiCaller.UpdateRealtimeData(device.Guid.Value, realtimeData);
- }
- }
|