You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.7 KiB
105 lines
3.7 KiB
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<Device>();
|
|
using (var scope = this._applicationService.CreateScope())
|
|
{
|
|
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
|
|
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<IRepository<Node>>();
|
|
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<IRepository<Device>>();
|
|
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<Device>();
|
|
using (var scope = this._applicationService.CreateScope())
|
|
{
|
|
var deviceInfoRepo = scope.ServiceProvider.GetService<IRepository<DeviceInfo>>();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
} |