Files
cms_thermo_active/Thermo.Active/Controllers/SignalR/NcHub.cs
T
2020-06-19 19:28:07 +02:00

240 lines
8.7 KiB
C#

using CMS_CORE_Library.Models;
using Microsoft.AspNet.SignalR;
using System.Collections.Generic;
using System.Threading.Tasks;
using TeamDev.SDK.MVVM;
using Thermo.Active.Attributes;
using Thermo.Active.NC;
using static CMS_CORE_Library.Models.DataStructures;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
using static Thermo.Active.Model.Constants.FUNCTIONALITY_NAMES;
namespace Thermo.Active.Controllers.SignalR
{
// [SignalRAuthorize(FunctionAccess = "functionAccess", Action = ACTIONS.READ)]
public class NcHub : Hub
{
public static List<string> ConnectedClients = new List<string>();
public static bool NewConnectedClients = false;
public override Task OnConnected()
{
Groups.Add(Context.ConnectionId, "ncData");
NewConnectedClients = true;
ConnectedClients.Add(Context.ConnectionId);
var result = base.OnConnected();
// Resends data to all the clients
MessageServices.Current.Publish(BROADCAST_DATA);
return result;
}
public override Task OnReconnected()
{
Groups.Add(Context.ConnectionId, "ncData");
NewConnectedClients = true;
ConnectedClients.Add(Context.ConnectionId);
var result = base.OnReconnected();
// Resends data to all the clients
MessageServices.Current.Publish(BROADCAST_DATA);
return result;
}
public override Task OnDisconnected(bool stopCalled)
{
Groups.Remove(Context.ConnectionId, "ncData");
ConnectedClients.Remove(Context.ConnectionId);
return base.OnDisconnected(stopCalled);
}
[SignalRAuthorize(FunctionAccess = STARTUP_ICONS, Action = ACTIONS.WRITE)]
public void PutPowerOnData(uint id)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
ncAdapter.PutPowerOnData(id);
}
}
// [SignalRAuthorize(FunctionAccess = "functionAccess", Action = ACTIONS.READ)]
[SignalRAuthorize(FunctionAccess = ALARM_CMD, Action = ACTIONS.WRITE)]
public void RefreshAllAlarms()
{
using (NcAdapter ncAdapter = new NcAdapter())
{
CmsError libraryError = ncAdapter.Connect();
// Call the library functions
libraryError = ncAdapter.RefreshAllAlarms();
}
// MessageServices.Current.Publish(SHOW_MSG_UI, null, "Refresh All Alarms.");
}
[SignalRAuthorize(FunctionAccess = ALARM_CMD, Action = ACTIONS.WRITE)]
public void RefreshAlarm(uint id)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
CmsError libraryError = ncAdapter.Connect();
// Call the library functions
libraryError = ncAdapter.RefreshAlarm(id);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
// MessageServices.Current.Publish(SHOW_MSG_UI, null, "Refresh Single Alarm. ID: " + id);
}
[SignalRAuthorize(FunctionAccess = ALARM_CMD, Action = ACTIONS.WRITE)]
public void RecoveryProcedure(uint id)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
CmsError libraryError = ncAdapter.Connect();
// Call the library functions
libraryError = ncAdapter.RestoreAlarm(id);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
// MessageServices.Current.Publish(SHOW_MSG_UI, null, "Recovery Alarm. ID: " + id);
}
[SignalRAuthorize(FunctionAccess = NC_SOFTKEY, Action = ACTIONS.WRITE)]
public void NcSoftKeyClick(int id)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
// Write the click into memory
CmsError libraryError = ncAdapter.PutNcSoftKeyClick((uint)id);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
[SignalRAuthorize(FunctionAccess = USER_SOFTKEY, Action = ACTIONS.WRITE)]
public void UserSoftKeyClick(int id)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
foreach (var softKey in SoftKeysConfig)
{
// Check softKey type
if (softKey.Type == SOFTKEY_TYPE.GROUP)
{
// Find in the subkeys
foreach (var subkey in softKey.SubKeys)
{
if (subkey.Id == id)
{
// Write click button
ncAdapter.PutUserSoftKeyClick((uint)subkey.PlcId);
break;
}
}
}
else
{
if (softKey.Id == id)
{
// Write click button
ncAdapter.PutUserSoftKeyClick((uint)softKey.PlcId);
break;
}
}
}
}
}
[SignalRAuthorize(FunctionAccess = PROCESS_CMD, Action = ACTIONS.WRITE)]
public void SelectProcess(ushort procNumber)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Connect the NC
CmsError libraryError = ncAdapter.Connect();
// Put value into memory
libraryError = ncAdapter.PutSelectProcess(procNumber);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
[SignalRAuthorize(FunctionAccess = AXES_SELECTION, Action = ACTIONS.WRITE)]
public void SelectAxis(byte axisId)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Connect the Nc
CmsError libraryError = ncAdapter.Connect();
// Put value into memory
libraryError = ncAdapter.PutSelectAxis(axisId);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
[SignalRAuthorize(FunctionAccess = HEADS_CMD, Action = ACTIONS.WRITE)]
public void AddOverride(uint id)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Connect the Nc
CmsError libraryError = ncAdapter.Connect();
// Put value into memory
libraryError = ncAdapter.PutOverride(id, "plus");
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
[SignalRAuthorize(FunctionAccess = HEADS_CMD, Action = ACTIONS.WRITE)]
public void SubOverride(uint id)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
// Connect the Nc
CmsError libraryError = ncAdapter.Connect();
// Put value into memory
libraryError = ncAdapter.PutOverride(id, "minus");
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
[SignalRAuthorize(FunctionAccess = GENERAL, Action = ACTIONS.WRITE)]
public void WriteM155Response(int process, double responseVal)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError libraryError = ncAdapter.WriteM155Data(process, responseVal);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
[SignalRAuthorize(FunctionAccess = GENERAL, Action = ACTIONS.WRITE)]
public void WriteScadaValue(string memIndex, SCADA_MEM_TYPE memType, object value)
{
using (NcAdapter ncAdapter = new NcAdapter())
{
ncAdapter.Connect();
CmsError libraryError = ncAdapter.WriteScada(memIndex, memType, value);
if (libraryError.IsError())
throw new HubException(libraryError.localizationKey);
}
}
}
}