using Microsoft.Win32; using System; using System.Collections.Generic; using System.IO; namespace SHARP_CLAS_UI { public class User_Info_Manager { #region Define string str_extension = ".xml"; #endregion #region Property private static readonly Lazy _instatnce = new Lazy(() => new User_Info_Manager()); public static User_Info_Manager Instance { get { return _instatnce.Value; } } #endregion #region Field private Dictionary User_Infos; private Xml_Manager xml_manager = new Xml_Manager(); private string file_path; #endregion #region Construct public User_Info_Manager() { User_Infos = new Dictionary(); Get_User_Info_Datas(); } #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("USER_INFO", @"C:\SHARP_CLAS\SETTING\USER_INFO\"); file_path = @"C:\SHARP_CLAS\SETTING\USER_INFO\"; } else { object value = rkk.GetValue("USER_INFO"); if (value == null) { rkk.SetValue("USER_INFO", @"C:\SHARP_CLAS\SETTING\USER_INFO\"); file_path = @"C:\SHARP_CLAS\SETTING\USER_INFO\"; } else { file_path = value.ToString(); } } } finally { rkk.Close(); } } private void Get_User_Info_Datas() { Get_File_Path(); User_Infos.Clear(); if (Directory.Exists(file_path)) { DirectoryInfo di = new DirectoryInfo(file_path); FileInfo[] recipes = di.GetFiles($"*{str_extension}"); foreach (FileInfo recipe in recipes) { User_Info user_info = new User_Info(); if (xml_manager.Try_Read_File(file_path + recipe, out user_info)) { if (User_Infos.ContainsKey(user_info.ID)) { User_Infos[user_info.ID] = user_info; } else { User_Infos.Add(user_info.ID, user_info); } } } } else { Directory.CreateDirectory(file_path); } if (!User_Infos.ContainsKey("DIT")) { User_Info info = new User_Info(); info.Name = "DIT"; info.Password = "DIT1234"; info.Level = En_User_Level.Master; info.ID = "DIT"; Create_User_Info(info); } if(!User_Infos.ContainsKey("OP")) { User_Info info = new User_Info(); info.Name = "OP"; info.Password = "1234"; info.Level = En_User_Level.Operator; info.ID = "OP"; Create_User_Info(info); } } public void Refresh_User_Info() { Get_User_Info_Datas(); } public bool Exist_User_Info(string ID) { foreach (User_Info info in User_Infos.Values) { if (ID == info.ID) return true; } return false; } public bool Create_User_Info(User_Info info) { if (!Exist_User_Info(info.ID)) { if (xml_manager.Try_Save_File(file_path + info.ID + str_extension, info)) { User_Infos.Add(info.ID, info.Clone()); return true; } else return false; } else return false; } public bool Delete_User_Info(string ID) { if (Exist_User_Info(ID)) { User_Infos.Remove(ID); FileInfo fi = new FileInfo(file_path + ID + str_extension); if (fi.Exists) { fi.Delete(); } } return true; } public bool Save_User_Info(string ID, User_Info info) { if (Exist_User_Info(ID)) { User_Infos[ID] = info.Clone(); User_Infos[ID].ID = ID; if (xml_manager.Try_Save_File(file_path + ID + str_extension, User_Infos[ID])) { return true; } else return false; } else { return false; } } public bool Try_Get_User_Info(string ID, out User_Info info) { if (Exist_User_Info(ID)) { info = User_Infos[ID].Clone(); return true; } else { info = null; return false; } } public User_Info Get_User_Info(string ID) { if (Exist_User_Info(ID)) { return User_Infos[ID].Clone(); } else { return null; } } public User_Info[] Get_User_Infos() { List infos = new List(); infos.Clear(); foreach (User_Info info in User_Infos.Values) { infos.Add(info.Clone()); } return infos.ToArray(); } #endregion } }