diff --git a/Libs/CMS_CORE_Library.dll b/Libs/CMS_CORE_Library.dll
index 32aad16e..91175856 100644
Binary files a/Libs/CMS_CORE_Library.dll and b/Libs/CMS_CORE_Library.dll differ
diff --git a/Step.Config/Config/maintenancesConfig.xml b/Step.Config/Config/maintenancesConfig.xml
index 9fd253d5..9d4f37ad 100644
--- a/Step.Config/Config/maintenancesConfig.xml
+++ b/Step.Config/Config/maintenancesConfig.xml
@@ -6,7 +6,10 @@
Test
Ita
- 5000
+ 10
+ 01/12/1999
+ interval
+ 1
2
@@ -14,6 +17,9 @@
Test
Ita
- 5000
+ 2500
+ 01/12/1999
+ exp_date
+ 2
\ No newline at end of file
diff --git a/Step.Config/Config/maintenancesConfigValidator.xsd b/Step.Config/Config/maintenancesConfigValidator.xsd
index 0cc0438e..443327aa 100644
--- a/Step.Config/Config/maintenancesConfigValidator.xsd
+++ b/Step.Config/Config/maintenancesConfigValidator.xsd
@@ -21,7 +21,10 @@
-
+
+
+
+
diff --git a/Step.Config/ServerConfigController.cs b/Step.Config/ServerConfigController.cs
index ec0d4fa6..c2c29c96 100644
--- a/Step.Config/ServerConfigController.cs
+++ b/Step.Config/ServerConfigController.cs
@@ -65,7 +65,10 @@ namespace Step.Config
LocalizedNames = x.Element("localizedNames").Elements().ToDictionary( // Read names list
y => y.Attribute("langKey").Value, y => y.Value
),
- count = Convert.ToInt32(x.Element("interval").Value)
+ Intervall = TimeSpan.FromHours(Convert.ToDouble(x.Element("interval").Value)),
+ Deadline = DateTime.Parse(x.Element("deadline").Value),
+ Type = x.Element("type").Value,
+ CouterId = Convert.ToInt32(x.Element("counterId").Value)
}
)
.ToList();
diff --git a/Step.Database/Controllers/MaintenancesController.cs b/Step.Database/Controllers/MaintenancesController.cs
index 206f8227..43cc81e4 100644
--- a/Step.Database/Controllers/MaintenancesController.cs
+++ b/Step.Database/Controllers/MaintenancesController.cs
@@ -1,4 +1,5 @@
-using Step.Model.DatabaseModels;
+using Step.Model.ConfigModels;
+using Step.Model.DatabaseModels;
using Step.Model.DTOModels;
using System;
using System.Collections.Generic;
@@ -23,9 +24,25 @@ namespace Step.Database.Controllers
dbCtx.Dispose();
}
- public DTOExpiredMaintenanceModel GetExpiredMaintenance()
+ public List FindLastMaintenance()
{
- return new DTOExpiredMaintenanceModel();
+ List lastMaintenances = new List();
+ // Find last performed maintenance
+ lastMaintenances = (from maintenances in dbCtx.PerformedMaintenances
+ where maintenances.Date == (from m1 in dbCtx.PerformedMaintenances // Select max data of performed maintenance
+ where m1.MaintenanceId == maintenances.MaintenanceId
+ select m1.Date
+ ).Max()
+ select maintenances).ToList();
+
+ return lastMaintenances;
+ }
+
+ public List FindAll()
+ {
+ return dbCtx
+ .Maintenances
+ .ToList();
}
public void CheckDifferencesFromDbAndXml()
@@ -39,12 +56,58 @@ namespace Step.Database.Controllers
!MaintenancesConfig.Select(y => y.Id).Contains(x.MaintenanceId)
).ToList();
+ // Delete database items
+ foreach (var item in toDeleteMaint)
+ dbCtx.Maintenances.Remove(item);
+ dbCtx.SaveChanges();
+
// Find common data from
List toUpdateMaint = dbMaintenances.Where(x =>
MaintenancesConfig.Select(y => y.Id).Contains(x.MaintenanceId)
- ).ToList();
+ )
+ .ToList();
-
+ // Update rows
+ if (toUpdateMaint != null)
+ foreach (MaintenanceModel item in toUpdateMaint)
+ {
+ // find to update into db
+ var old = dbCtx.Maintenances.Where(x => x.MaintenanceId == item.MaintenanceId).FirstOrDefault();
+
+ // Update model
+ old = MaintenancesConfig.Where(x => x.Id == item.MaintenanceId).Select(x =>
+ {
+ old.MaintenanceId = x.Id;
+ old.Deadline = x.Deadline;
+ old.Intervall = x.Intervall.TotalMinutes;
+ old.Type = x.Type;
+ old.CounterId = x.CouterId;
+ return old;
+
+ }).FirstOrDefault();
+ }
+
+ dbCtx.SaveChanges();
+
+ // Get new maintenance from file
+ List toAddMaint = MaintenancesConfig
+ .Where(x => !toUpdateMaint.Select(y => y.MaintenanceId).Contains(x.Id))
+ .Select(x => new MaintenanceModel()
+ {
+ MaintenanceId = x.Id,
+ Deadline = x.Deadline,
+ Intervall = x.Intervall.TotalMinutes,
+ Type = x.Type,
+ CounterId = x.CouterId
+ })
+ .ToList();
+
+ // Add new maintenances to database
+ if (toAddMaint != null)
+ {
+ dbCtx.Maintenances.AddRange(toAddMaint);
+ dbCtx.SaveChanges();
+ }
}
}
}
diff --git a/Step.Database/DatabaseContext.cs b/Step.Database/DatabaseContext.cs
index 96272f0a..f5e170a2 100644
--- a/Step.Database/DatabaseContext.cs
+++ b/Step.Database/DatabaseContext.cs
@@ -24,6 +24,8 @@ namespace Step.Database
public DbSet FunctionsAccess { get; set; }
public DbSet Sessions { get; set; }
public DbSet Maintenances { get; set; }
+ public DbSet PerformedMaintenances { get; set; }
+
public DatabaseContext()
: base("mySQLDatabaseConnection")
diff --git a/Step.Database/Migrations/201802141408206_InitCreate.Designer.cs b/Step.Database/Migrations/201802141408206_InitCreate.Designer.cs
new file mode 100644
index 00000000..29ab1212
--- /dev/null
+++ b/Step.Database/Migrations/201802141408206_InitCreate.Designer.cs
@@ -0,0 +1,29 @@
+//
+namespace Step.Database.Migrations
+{
+ using System.CodeDom.Compiler;
+ using System.Data.Entity.Migrations;
+ using System.Data.Entity.Migrations.Infrastructure;
+ using System.Resources;
+
+ [GeneratedCode("EntityFramework.Migrations", "6.2.0-61023")]
+ public sealed partial class InitCreate : IMigrationMetadata
+ {
+ private readonly ResourceManager Resources = new ResourceManager(typeof(InitCreate));
+
+ string IMigrationMetadata.Id
+ {
+ get { return "201802141408206_InitCreate"; }
+ }
+
+ string IMigrationMetadata.Source
+ {
+ get { return null; }
+ }
+
+ string IMigrationMetadata.Target
+ {
+ get { return Resources.GetString("Target"); }
+ }
+ }
+}
diff --git a/Step.Database/Migrations/201802141408206_InitCreate.cs b/Step.Database/Migrations/201802141408206_InitCreate.cs
new file mode 100644
index 00000000..9f800792
--- /dev/null
+++ b/Step.Database/Migrations/201802141408206_InitCreate.cs
@@ -0,0 +1,136 @@
+namespace Step.Database.Migrations
+{
+ using System;
+ using System.Data.Entity.Migrations;
+
+ public partial class InitCreate : DbMigration
+ {
+ public override void Up()
+ {
+ CreateTable(
+ "dbo.function_access",
+ c => new
+ {
+ id = c.Int(nullable: false, identity: true),
+ name = c.String(unicode: false),
+ write_level_min = c.Int(nullable: false),
+ read_level_min = c.Int(nullable: false),
+ area = c.String(unicode: false),
+ enabled = c.Boolean(nullable: false),
+ plc_id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.id);
+
+ CreateTable(
+ "dbo.machine",
+ c => new
+ {
+ id = c.Int(nullable: false, identity: true),
+ name = c.String(unicode: false),
+ unique_id = c.String(unicode: false),
+ })
+ .PrimaryKey(t => t.id);
+
+ CreateTable(
+ "dbo.machine_user",
+ c => new
+ {
+ id = c.Int(nullable: false, identity: true),
+ machine_id = c.Int(nullable: false),
+ user_id = c.Int(nullable: false),
+ role_id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.id)
+ .ForeignKey("dbo.machine", t => t.machine_id, cascadeDelete: true)
+ .ForeignKey("dbo.role", t => t.role_id, cascadeDelete: true)
+ .ForeignKey("dbo.user", t => t.user_id, cascadeDelete: true)
+ .Index(t => new { t.machine_id, t.user_id }, unique: true, clustered: true, name: "unique_machine_user")
+ .Index(t => t.role_id);
+
+ CreateTable(
+ "dbo.role",
+ c => new
+ {
+ id = c.Int(nullable: false, identity: true),
+ name = c.String(unicode: false),
+ level = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.id);
+
+ CreateTable(
+ "dbo.user",
+ c => new
+ {
+ id = c.Int(nullable: false, identity: true),
+ username = c.String(nullable: false, unicode: false),
+ first_name = c.String(unicode: false),
+ last_name = c.String(unicode: false),
+ password = c.String(unicode: false),
+ security_stamp = c.String(unicode: false),
+ language = c.String(unicode: false),
+ role_id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.id);
+
+ CreateTable(
+ "dbo.maintenance",
+ c => new
+ {
+ id = c.Int(nullable: false),
+ intervall = c.Double(nullable: false),
+ deadline = c.DateTime(nullable: false, precision: 0),
+ type = c.String(unicode: false),
+ counter_id = c.Int(nullable: false),
+ creation_date = c.DateTime(nullable: false, precision: 0),
+ })
+ .PrimaryKey(t => t.id);
+
+ CreateTable(
+ "dbo.performed_maintenance",
+ c => new
+ {
+ id = c.Int(nullable: false, identity: true),
+ date = c.DateTime(nullable: false, precision: 0),
+ counter_value = c.Int(nullable: false),
+ maintenance = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.id)
+ .ForeignKey("dbo.maintenance", t => t.maintenance, cascadeDelete: true)
+ .Index(t => t.maintenance);
+
+ CreateTable(
+ "dbo.session",
+ c => new
+ {
+ id = c.Int(nullable: false, identity: true),
+ token = c.String(unicode: false),
+ machine_user_id = c.Int(nullable: false),
+ })
+ .PrimaryKey(t => t.id)
+ .ForeignKey("dbo.machine_user", t => t.machine_user_id, cascadeDelete: true)
+ .Index(t => t.machine_user_id);
+
+ }
+
+ public override void Down()
+ {
+ DropForeignKey("dbo.session", "machine_user_id", "dbo.machine_user");
+ DropForeignKey("dbo.performed_maintenance", "maintenance", "dbo.maintenance");
+ DropForeignKey("dbo.machine_user", "user_id", "dbo.user");
+ DropForeignKey("dbo.machine_user", "role_id", "dbo.role");
+ DropForeignKey("dbo.machine_user", "machine_id", "dbo.machine");
+ DropIndex("dbo.session", new[] { "machine_user_id" });
+ DropIndex("dbo.performed_maintenance", new[] { "maintenance" });
+ DropIndex("dbo.machine_user", new[] { "role_id" });
+ DropIndex("dbo.machine_user", "unique_machine_user");
+ DropTable("dbo.session");
+ DropTable("dbo.performed_maintenance");
+ DropTable("dbo.maintenance");
+ DropTable("dbo.user");
+ DropTable("dbo.role");
+ DropTable("dbo.machine_user");
+ DropTable("dbo.machine");
+ DropTable("dbo.function_access");
+ }
+ }
+}
diff --git a/Step.Database/Migrations/201802141408206_InitCreate.resx b/Step.Database/Migrations/201802141408206_InitCreate.resx
new file mode 100644
index 00000000..607d55ae
--- /dev/null
+++ b/Step.Database/Migrations/201802141408206_InitCreate.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 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
+
+
+ dbo
+
+
\ No newline at end of file
diff --git a/Step.Database/Step.Database.csproj b/Step.Database/Step.Database.csproj
index 12a45bb5..94de5c26 100644
--- a/Step.Database/Step.Database.csproj
+++ b/Step.Database/Step.Database.csproj
@@ -77,6 +77,10 @@
+
+
+ 201802141408206_InitCreate.cs
+
@@ -110,5 +114,10 @@
+
+
+ 201802141408206_InitCreate.cs
+
+
\ No newline at end of file
diff --git a/Step.Model/ConfigModels/MaintenanceConfigModel.cs b/Step.Model/ConfigModels/MaintenanceConfigModel.cs
index 4f6e2b72..c2f06671 100644
--- a/Step.Model/ConfigModels/MaintenanceConfigModel.cs
+++ b/Step.Model/ConfigModels/MaintenanceConfigModel.cs
@@ -1,16 +1,15 @@
using System;
using System.Collections.Generic;
-using System.Globalization;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace Step.Model.ConfigModels
{
public class MaintenanceConfigModel
{
- public int Id;
- public Dictionary LocalizedNames;
- public int count;
+ public int Id { get; set; }
+ public Dictionary LocalizedNames { get; set; }
+ public TimeSpan Intervall { get; set; }
+ public DateTime Deadline { get; set; }
+ public string Type { get; set; }
+ public int CouterId { get; set; }
}
-}
+}
\ No newline at end of file
diff --git a/Step.Model/DTOModels/DTOExpiredMaintenanceModel.cs b/Step.Model/DTOModels/DTOExpiredMaintenanceModel.cs
index eb5f4c68..e644e15a 100644
--- a/Step.Model/DTOModels/DTOExpiredMaintenanceModel.cs
+++ b/Step.Model/DTOModels/DTOExpiredMaintenanceModel.cs
@@ -1,15 +1,10 @@
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
namespace Step.Model.DTOModels
{
public class DTOExpiredMaintenanceModel
{
public string Id { get; set; }
- public string Name { get; set; }
- public string ExpirationDate { get; set; }
+ public DateTime ExpirationDate { get; set; }
}
-}
+}
\ No newline at end of file
diff --git a/Step.Model/DatabaseModels/MaintenanceModel.cs b/Step.Model/DatabaseModels/MaintenanceModel.cs
index 938a5e72..5c7a6545 100644
--- a/Step.Model/DatabaseModels/MaintenanceModel.cs
+++ b/Step.Model/DatabaseModels/MaintenanceModel.cs
@@ -8,14 +8,15 @@ namespace Step.Model.DatabaseModels
public class MaintenanceModel
{
[Key]
+ [DatabaseGenerated(DatabaseGeneratedOption.None)]
[Column("id")]
public int MaintenanceId { get; set; }
[Column("intervall")]
- public TimeSpan Intervall { get; set; }
+ public double Intervall { get; set; }
[Column("deadline")]
- public DateTime DeadLine { get; set; }
+ public DateTime Deadline { get; set; }
[Column("type")]
public string Type { get; set; }
@@ -26,17 +27,17 @@ namespace Step.Model.DatabaseModels
[Column("creation_date")]
public DateTime CreationDate { get; set; }
- public override bool Equals(object obj)
- {
- var item = obj as MaintenanceModel;
+ //public override bool Equals(object obj)
+ //{
+ // var item = obj as MaintenanceModel;
- if (item == null)
- return false;
+ // if (item == null)
+ // return false;
- if (item.MaintenanceId != MaintenanceId)
- return false;
+ // if (item.MaintenanceId != MaintenanceId)
+ // return false;
- return true;
- }
+ // return true;
+ //}
}
}
\ No newline at end of file
diff --git a/Step.Model/DatabaseModels/PerformedMaintenanceModel.cs b/Step.Model/DatabaseModels/PerformedMaintenanceModel.cs
index cfb03446..f553e107 100644
--- a/Step.Model/DatabaseModels/PerformedMaintenanceModel.cs
+++ b/Step.Model/DatabaseModels/PerformedMaintenanceModel.cs
@@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Step.Model.DatabaseModels
{
- [Table("machine_user")]
+ [Table("performed_maintenance")]
public class PerformedMaintenanceModel
{
[Key]
@@ -16,5 +16,11 @@ namespace Step.Model.DatabaseModels
[Column("counter_value")]
public int CounterValue { get; set; }
+
+ [Column("maintenance")]
+ public int MaintenanceId { get; set; }
+
+ [ForeignKey("MaintenanceId")]
+ public MaintenanceModel Maintenance { get; set; }
}
}
\ No newline at end of file
diff --git a/Step.NC/NcHandler.cs b/Step.NC/NcHandler.cs
index 68b9a0ef..4926b70d 100644
--- a/Step.NC/NcHandler.cs
+++ b/Step.NC/NcHandler.cs
@@ -4,6 +4,7 @@ using CMS_CORE.Fanuc;
using CMS_CORE.Osai;
using CMS_CORE.Siemens;
using Step.Database.Controllers;
+using Step.Model.DatabaseModels;
using Step.Model.DTOModels;
using System;
using System.Collections.Generic;
@@ -336,6 +337,65 @@ namespace Step.NC
return cmsError;
}
+ public CmsError GetExpiredMaintenances()
+ {
+ List expiredMaintenance = new List();
+
+ List counters = new List();
+
+ CmsError cmsError = numericalControl.PLC_RMachineCounters(ref counters);
+ if (cmsError.IsError())
+ return cmsError;
+
+ using (MaintenancesController maintenancesController = new MaintenancesController())
+ {
+ // Get the last performed maintenance for each maintenance
+ List performedMaintenance = maintenancesController.FindLastMaintenance();
+
+ // Get all the active maintenances
+ List maintenances = maintenancesController.FindAll();
+
+ foreach (var maintenance in maintenances)
+ {
+ // Get matching last performed maintenance for current maintenance
+ var performed = performedMaintenance.Find(x => x.MaintenanceId == maintenance.MaintenanceId);
+
+ switch (maintenance.Type)
+ {
+ case "interval":
+ {
+ // Get matching counter for the current maintenance
+ var counter = counters.Find(x => x.Id == maintenance.CounterId);
+
+ // PLC - LASTPERFORMED >= MAINTENANCE_INTERVAL
+ if (counter.Value - performed.CounterValue >= maintenance.Intervall)
+ {
+ expiredMaintenance.Add(new DTOExpiredMaintenanceModel()
+ {
+ Id = MAINTENANCE_PREFIX_ID + maintenance.MaintenanceId,
+ ExpirationDate = DateTime.Now
+ });
+ }
+ }
+ break;
+
+ case "exp_date":
+ {
+ if (maintenance.Deadline <= DateTime.Now)
+ expiredMaintenance.Add(new DTOExpiredMaintenanceModel()
+ {
+ Id = MAINTENANCE_PREFIX_ID + maintenance.MaintenanceId,
+ ExpirationDate = maintenance.Deadline
+ });
+ }
+ break;
+ }
+ }
+ }
+
+ return cmsError;
+ }
+
public CmsError RefreshAllAlarms()
{
return new CmsError(0, "");
diff --git a/Step.Tasks/ThreadsFunctions.cs b/Step.Tasks/ThreadsFunctions.cs
index 4cad1f8d..abaec1a7 100644
--- a/Step.Tasks/ThreadsFunctions.cs
+++ b/Step.Tasks/ThreadsFunctions.cs
@@ -281,6 +281,50 @@ public static class ThreadsFunctions
}
}
+ public static void ReadExpiredMaintenances()
+ {
+ NcHandler ncHandler = new NcHandler();
+ Stopwatch sw = new Stopwatch();
+
+ try
+ {
+ // Try connection
+ CmsError libraryError = ncHandler.Connect();
+ if (libraryError.errorCode != 0)
+ ManageLibraryError(libraryError);
+
+ while (true)
+ {
+ sw.Restart();
+
+ if (ncHandler.numericalControl.NC_IsConnected())
+ {
+ // Get Data from database and PLC
+ libraryError = ncHandler.GetExpiredMaintenances();
+ if (libraryError.errorCode != 0)
+ ManageLibraryError(libraryError);
+ //else
+ // Send through signalR
+ // MessageServices.Current.Publish(SEND_FUNCTIONALITY_DATA, null, functionsAccessList);
+ }
+ else
+ TryNcConnection();
+
+ sw.Stop();
+ //Send to the UI the time
+ ReadFunctionTimer += sw.ElapsedMilliseconds;
+ ReadFunctionTimes++;
+
+ // Wait
+ Thread.Sleep(200);
+ }
+ }
+ catch (ThreadAbortException)
+ {
+ ncHandler.Dispose();
+ }
+ }
+
#endregion Nc Threads
#region SupportFunctions
diff --git a/Step.Tasks/ThreadsHandler.cs b/Step.Tasks/ThreadsHandler.cs
index 34990992..756739d1 100644
--- a/Step.Tasks/ThreadsHandler.cs
+++ b/Step.Tasks/ThreadsHandler.cs
@@ -1,25 +1,14 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
using System.Threading;
-using System.Threading.Tasks;
-using CMS_CORE;
-using CMS_CORE.Demo;
-using CMS_CORE.Fanuc;
-using CMS_CORE.Osai;
-using CMS_CORE.Siemens;
-using Step.NC;
-using static Step.Config.ServerConfig;
-using static Step.Utils.Constants;
using TeamDev.SDK.MVVM;
-using System.Diagnostics;
+using static Step.Utils.Constants;
namespace Step.Core
{
- public static class ThreadsHandler
- {
- private static List ThreadFunctionsList = new List
+ public static class ThreadsHandler
+ {
+ private static List ThreadFunctionsList = new List
{
ThreadsFunctions.ReadAlarms,
ThreadsFunctions.ReadNcGenericInfo,
@@ -27,71 +16,68 @@ namespace Step.Core
ThreadsFunctions.ReadPowerOnData,
ThreadsFunctions.StatThread,
ThreadsFunctions.ReadProcessesPPStatus,
- ThreadsFunctions.ReadEnabledFunctionality
+ ThreadsFunctions.ReadEnabledFunctionality,
+ ThreadsFunctions.ReadExpiredMaintenances
};
- private volatile static List RunningThreadsList = new List();
- internal volatile static Dictionary RunningThreadStatus = new Dictionary();
- public static void Start()
- {
- ThreadsFunctions.TryNcConnection();
- }
+ private volatile static List RunningThreadsList = new List();
+ internal volatile static Dictionary RunningThreadStatus = new Dictionary();
- public static void StartWorkers()
- {
-
- RunningThreadStatus.Clear();
-
- // For each function run in the list a thread
- ThreadFunctionsList.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();
-
- RunningThreadStatus.Clear();
- RunningThreadStatus.Add("TryNcConnection", "---");
- MessageServices.Current.Publish(SEND_THREADS_STATUS, null, RunningThreadStatus);
- }
-
- public static void Close()
- {
- //Abort Nc Read Threads
- RunningThreadsList.ForEach(thread =>
+ public static void Start()
{
- thread.Abort();
- });
+ ThreadsFunctions.TryNcConnection();
+ }
- //Abort Connect Thread
- ThreadsFunctions.AbortNcConnection();
+ public static void StartWorkers()
+ {
+ RunningThreadStatus.Clear();
+
+ // For each function run in the list a thread
+ ThreadFunctionsList.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();
+
+ 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();
+ });
+
+ //Abort Connect Thread
+ ThreadsFunctions.AbortNcConnection();
+ }
}
-
- }
-}
-
+}
\ No newline at end of file
diff --git a/Step.Utils/Constants.cs b/Step.Utils/Constants.cs
index 7e2ea65b..1df2fcde 100644
--- a/Step.Utils/Constants.cs
+++ b/Step.Utils/Constants.cs
@@ -84,5 +84,8 @@ namespace Step.Utils
public const string SEND_PROCESSES_DATA = "SEND_PROCESSES_STATUS";
public const string SEND_FUNCTIONALITY_DATA = "SEND_FUNCTION_DATA";
+
+ // ID prefix
+ public const string MAINTENANCE_PREFIX_ID = "MAINT_";
}
}
diff --git a/Step/Controllers/WebApi/LanguageController.cs b/Step/Controllers/WebApi/LanguageController.cs
index cfc24622..d3814a60 100644
--- a/Step/Controllers/WebApi/LanguageController.cs
+++ b/Step/Controllers/WebApi/LanguageController.cs
@@ -8,6 +8,7 @@ using Step.Model.ConfigModels;
using Step.Model.DTOModels;
using static Step.Config.ServerConfig;
using static Step.Utils.LanguageController;
+using static Step.Utils.Constants;
namespace Step.Controllers.WebApi
{
@@ -54,7 +55,7 @@ namespace Step.Controllers.WebApi
return MaintenancesConfig
.ToDictionary(
- x => "MANT_" + x.Id.ToString(),
+ x => MAINTENANCE_PREFIX_ID + x.Id.ToString(),
x => GetValueFromMaintenanceNameList(x.LocalizedNames, language, x.Id)
);
}