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.
iot/projects/IoTCenter/Services/PageHub.cs

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);
}
}
}
}