Files
activestep/Step.Core/ThreadsHandler.cs
2020-09-12 16:11:43 +02:00

121 lines
3.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading;
using TeamDev.SDK.MVVM;
using static Step.Model.Constants;
using Step.Core.ThreadsFunctions;
namespace Step.Core
{
public static class ThreadsHandler
{
private static List<Action> ThreadsFunctionsList = new List<Action>
{
ThreadsSupportFunctions.StatThread,
NcFunctions.ManageWatchdog,
NcFunctions.ReadAlarms,
NcFunctions.ReadPowerOnData,
NcFunctions.ReadProcessesPPStatus,
NcFunctions.ReadEnabledFunctionality,
NcFunctions.ReadExpiredMaintenances,
NcFunctions.ReadAxesPositionsData,
NcFunctions.ReadMagazinesStatus,
NcFunctions.ReadUserSoftKeysData,
NcFunctions.ReadHeadsData,
NcFunctions.ReadAxesNamesData,
NcFunctions.ReadActiveProgramData,
NcFunctions.UpdateToolsData,
NcFunctions.ReadNcMagazineActive,
NcFunctions.ReadScadaData,
NcFunctions.ReadMComandsData,
CmsConnectFunctions.ReadM154Data,
CmsConnectFunctions.SetupCmsConnectConnection
};
private static Action ThreadSetupCmsConnect = CmsConnectFunctions.SetupCmsConnect;
private volatile static List<Thread> RunningThreadsList = new List<Thread>();
public static Thread StartClient;
internal volatile static Dictionary<string, string> RunningThreadStatus = new Dictionary<string, string>();
public static void Start()
{
ThreadsSupportFunctions.RestoreConnection();
//Setup CMS Connect
//if(Config.ServerConfig.CmsConnectConfig.Enabled)
if (Config.ServerConfig.ServerStartupConfig.CmsConnectReady)
{
Thread t = new Thread(() => ThreadSetupCmsConnect());
t.Start();
}
}
public static void StartWorkers()
{
lock (RunningThreadStatus)
RunningThreadStatus.Clear();
// For each function run in the list a thread
ThreadsFunctionsList.ForEach(threadFunction =>
{
// Run new Thread in the list
Thread t = new Thread(() =>
threadFunction()
);
t.Start();
// Add thread to running threads list
lock (RunningThreadsList)
RunningThreadsList.Add(t);
RunningThreadStatus.Add(threadFunction.Method.Name, "---");
});
MessageServices.Current.Publish(SEND_THREADS_STATUS, null, RunningThreadStatus);
}
public static void Stop()
{
// Stop each thread
lock (RunningThreadsList)
RunningThreadsList.ForEach(thread =>
{
thread.Abort();
});
// Remove threads from running status
lock (RunningThreadsList)
RunningThreadsList.Clear();
lock (RunningThreadStatus)
{
RunningThreadStatus.Clear();
RunningThreadStatus.Add("TryNcConnection", "---");
}
MessageServices.Current.Publish(SEND_THREADS_STATUS, null, RunningThreadStatus);
}
public static void Close()
{
//Abort Nc Read Threads
RunningThreadsList.ForEach(thread =>
{
thread.Abort();
});
if(ThreadsHandler.StartClient != null)
ThreadsHandler.StartClient.Abort();
//Abort Connect Thread
ThreadsSupportFunctions.AbortNcConnection();
}
public static void StartClientFromUI()
{
ThreadsSupportFunctions.StartCMSClient();
}
}
}