using Application.Domain.Entities; using Infrastructure.Data; using Infrastructure.Extensions; using Infrastructure.Web.SignalR; using Microsoft.Extensions.DependencyInjection; using System; using System.Linq; namespace IoTCenter.Services { public class PageHub : BasePageHub { private readonly IServiceProvider _applicationService; public PageHub(IServiceProvider applicationService) { this._applicationService = applicationService; } public override void ClientToServer(string method, string message, string connectionId) { if (method == "UpdateDevice") { this.UpdateDevice(message); } else if (method == "UpdateDeviceInfo") { this.UpdateDeviceInfo(message); } else if (message == "ApiCallback") { this.ApiCallback(message, connectionId); } } private void UpdateDevice(string message) { var newDevice = message.FromJson(); using (var scope = this._applicationService.CreateScope()) { var deviceInfoRepo = scope.ServiceProvider.GetService>(); var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDevice.InfoNumber); if (deviceInfo == null) { deviceInfo = new DeviceInfo { Name = newDevice.Name, Number = newDevice.InfoNumber }; deviceInfoRepo.Add(deviceInfo); deviceInfoRepo.SaveChanges(); } var nodeRepo = scope.ServiceProvider.GetService>(); var node = nodeRepo.Table().FirstOrDefault(o => o.Number == newDevice.NodeNumber); if (node == null) { node = new Node { Number = newDevice.NodeNumber, Name = newDevice.NodeNumber }; nodeRepo.Add(node); nodeRepo.SaveChanges(); } var deviceRepo = scope.ServiceProvider.GetService>(); var device = deviceRepo.Table().FirstOrDefault(o => o.Number == newDevice.Number); if (device == null) { device = new Device { }; } } Console.WriteLine(message); } private void UpdateDeviceInfo(string message) { var newDeviceInfo = message.FromJson(); using (var scope = this._applicationService.CreateScope()) { var deviceInfoRepo = scope.ServiceProvider.GetService>(); var deviceInfo = deviceInfoRepo.Table().FirstOrDefault(o => o.Number == newDeviceInfo.InfoNumber); if (deviceInfo == null) { deviceInfo = new DeviceInfo { //Name = newDevice.Name, //Number = newDevice.InfoNumber }; deviceInfoRepo.Add(deviceInfo); deviceInfoRepo.SaveChanges(); } } } public void ApiCallback(string message, string connectionId) { if (!string.IsNullOrEmpty(connectionId)) { this.ServerToClient(connectionId, "ApiCallback", message); } } } }