using System;
|
using System.Collections.Generic;
|
using log4net;
|
using log4net.Appender;
|
using log4net.Layout;
|
using log4net.Repository.Hierarchy;
|
using System.Text;
|
using Microsoft.Win32;
|
using System.IO;
|
using System.Threading;
|
|
namespace SHARP_CLAS_UI
|
{
|
public class Panel_Info_Manager
|
{
|
#region Define
|
string str_extension = ".xml";
|
#endregion
|
|
#region Logger
|
/// <summary>
|
/// Alarm Log
|
/// </summary>
|
private ILog Panel_Info_Change_Log = LogManager.GetLogger("Panel_Info_Change");
|
|
/// <summary>
|
/// Alarm Log Write
|
/// </summary>
|
/// <param name="Methodname">Method name of exception that occurred</param>
|
/// <param name="ex">exception</param>
|
private void Write_Panel_Info_Change_Log(string message)
|
{
|
if (Panel_Info_Change_Log != null) Panel_Info_Change_Log.Debug($"{message}");
|
}
|
|
/// <summary>
|
/// Create excepton logger
|
/// </summary>
|
private void Create_Panel_Info_Change_logger()
|
{
|
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
|
RollingFileAppender rollingAppender = new RollingFileAppender();
|
|
PatternLayout layout = new PatternLayout();
|
hierarchy.Configured = true;
|
|
rollingAppender.Name = "Panel_Info_Change_RoolingFile";
|
rollingAppender.LockingModel = new RollingFileAppender.MinimalLock();
|
rollingAppender.File = $@"D:\Logger\Panel_Info_Change\";
|
rollingAppender.AppendToFile = true;
|
rollingAppender.DatePattern = "yyyy\\\\MM\\\\'Panel_Info_Change'_dd'.csv'";
|
rollingAppender.RollingStyle = RollingFileAppender.RollingMode.Composite;
|
rollingAppender.MaxSizeRollBackups = 10;
|
rollingAppender.MaximumFileSize = "100MB";
|
rollingAppender.StaticLogFileName = false;
|
rollingAppender.Encoding = Encoding.UTF8;
|
rollingAppender.PreserveLogFileNameExtension = true;
|
layout = new PatternLayout("%d{yyyy/MM/dd HH:mm:ss.fff},%m%n");
|
layout.ActivateOptions();
|
rollingAppender.Layout = layout;
|
rollingAppender.ActivateOptions();
|
|
hierarchy.GetLogger("Panel_Info_Change");
|
ILog log = LogManager.GetLogger("Panel_Info_Change");
|
Logger l = (Logger)log.Logger;
|
l.Level = log4net.Core.Level.Debug;
|
l.AddAppender(rollingAppender);
|
|
Panel_Info_Change_Log = LogManager.GetLogger("Panel_Info_Change");
|
}
|
#endregion
|
|
#region Property
|
private static readonly Lazy<Panel_Info_Manager> _instatnce = new Lazy<Panel_Info_Manager>(() => new Panel_Info_Manager());
|
|
public static Panel_Info_Manager Instance
|
{
|
get
|
{
|
return _instatnce.Value;
|
}
|
}
|
|
public Dictionary<Panel_Info_Names, Panel_Info> Panel_Infos { get; set; }
|
|
private Xml_Manager<Panel_Info> xml_manager = new Xml_Manager<Panel_Info>();
|
private string file_path;
|
|
private object _lockObject;
|
private bool _isLock;
|
#endregion
|
|
#region Construct
|
private Panel_Info_Manager()
|
{
|
Create_Panel_Info_Change_logger();
|
|
_lockObject = new object();
|
|
Get_File_Path();
|
|
Panel_Infos = new Dictionary<Panel_Info_Names, Panel_Info>();
|
|
foreach (Panel_Info_Names info in Enum.GetValues(typeof(Panel_Info_Names)))
|
{
|
Panel_Infos.Add(info, new Panel_Info());
|
}
|
}
|
#endregion
|
|
#region Function
|
private void Get_File_Path()
|
{
|
RegistryKey rkk = Registry.CurrentUser.OpenSubKey(Equipment.Registry_Path, true);
|
|
try
|
{
|
if (rkk == null)
|
{
|
rkk = Registry.CurrentUser.CreateSubKey(Equipment.Registry_Path);
|
|
rkk.SetValue("PANEL_INFO_PATH", @"C:\SHARP_CLAS\Config\PANEL_INFO\");
|
file_path = @"C:\SHARP_CLAS\Config\PANEL_INFO\";
|
}
|
else
|
{
|
object value = rkk.GetValue("PANEL_INFO_PATH");
|
if (value == null)
|
{
|
rkk.SetValue("PANEL_INFO_PATH", @"C:\SHARP_CLAS\Config\PANEL_INFO\");
|
file_path = @"C:\SHARP_CLAS\Config\PANEL_INFO\";
|
}
|
else
|
{
|
file_path = value.ToString();
|
}
|
}
|
}
|
finally
|
{
|
rkk.Close();
|
}
|
}
|
|
public Panel_Info Get_Panel_Info(Panel_Info_Names panel_name, int tray_panel_num = 0)
|
{
|
lock (_lockObject)
|
{
|
try
|
{
|
while (_isLock)
|
{
|
Monitor.Wait(_lockObject);
|
}
|
_isLock = true;
|
|
Panel_Info info;
|
string info_name = string.Empty;
|
|
if (panel_name == Panel_Info_Names.LD_Tray_In || panel_name == Panel_Info_Names.ULD_Tray_Ok || panel_name == Panel_Info_Names.ULD_Tray_Ng)
|
{
|
info_name = $"{panel_name}_{tray_panel_num}";
|
}
|
else
|
{
|
info_name = $"{panel_name}";
|
}
|
|
info_name += str_extension;
|
|
if (File.Exists(file_path + info_name))
|
{
|
info = xml_manager.Read_File(file_path + info_name);
|
}
|
else
|
{
|
info = new Panel_Info();
|
xml_manager.Save_File(file_path + info_name, info);
|
}
|
|
if(info == null)
|
{
|
info = new Panel_Info();
|
xml_manager.Save_File(file_path + info_name, info);
|
}
|
|
Panel_Infos[panel_name] = info.Clone();
|
|
return Panel_Infos[panel_name].Clone();
|
|
}
|
finally
|
{
|
_isLock = false;
|
Monitor.Pulse(_lockObject);
|
}
|
}
|
}
|
|
public bool Move_Panel_Info(Panel_Info_Names remove_info, Panel_Info_Names make_info)
|
{
|
try
|
{
|
bool check = true;
|
|
Get_Panel_Info(remove_info);
|
|
Set_Panel_Info(make_info, Panel_Infos[remove_info]);
|
|
Panel_Info resetInfo = new Panel_Info();
|
|
Set_Panel_Info(remove_info, resetInfo);
|
|
Get_Panel_Info(remove_info);
|
|
return check;
|
}
|
catch(Exception )
|
{
|
return false;
|
}
|
}
|
|
public bool Set_Panel_Info(Panel_Info_Names name, Panel_Info info)
|
{
|
lock (_lockObject)
|
{
|
try
|
{
|
while (_isLock)
|
{
|
Monitor.Wait(_lockObject);
|
}
|
_isLock = true;
|
|
string info_name = string.Empty;
|
|
if (name == Panel_Info_Names.LD_Tray_In || name == Panel_Info_Names.ULD_Tray_Ok || name == Panel_Info_Names.ULD_Tray_Ng)
|
{
|
info_name = $"{name}_{info.Panel_Num}";
|
}
|
else
|
{
|
info_name = $"{name}";
|
}
|
|
info_name += str_extension;
|
xml_manager.Save_File(file_path + info_name, info);
|
Write_Panel_Info_Change_Log($"{info_name},{info.ToString()}");
|
|
Panel_Infos[name] = info.Clone();
|
return true;
|
}
|
finally
|
{
|
_isLock = false;
|
Monitor.Pulse(_lockObject);
|
}
|
}
|
}
|
#endregion
|
}
|
}
|