using SA_LTT.Base; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SA_LTT.UserInfo { public delegate void UserInfoChanged(); public class UserManager : XmlManager { Equipment _equipment; readonly string _extension = ".xml"; readonly string _filePath = @"User\"; public event UserInfoChanged Changed; private Dictionary _users = new Dictionary(); private Dictionary Users { get { return _users; } set { _users = value; } } public UserManager(Equipment equipment) { _equipment = equipment; RefreshUsers(); } public void RefreshUsers() { DirectoryInfo directoryInfo = new DirectoryInfo(Equipment.infoFilePath + _filePath); if(directoryInfo.Exists == false) { directoryInfo.Create(); } foreach (FileInfo fileInfo in directoryInfo.GetFiles("*.xml")) { User user = new User(); if(TryReadFile(fileInfo.FullName, out user)) { if (Users.ContainsKey(user.Name)) { Users[user.Name] = user.Clone(); } else { Users.Add(user.Name, user.Clone()); } } } // DIT 계정 없을 시 생성. if (Users.ContainsKey("DIT") == false) { User user = new User(); user.Name = "DIT"; user.Password = "1234"; user.Level = UserLevel.Master; SaveOrCreate(user); } // Operator 계정 없을 시 생성. if (Users.ContainsKey("Operator") == false) { User user = new User(); user.Name = "Operator"; user.Password = "1234"; user.Level = UserLevel.Operator; SaveOrCreate(user); } } public void SaveOrCreate(User user) { SaveFile(Equipment.infoFilePath + _filePath + user.Name + _extension, user); if (Users.ContainsKey(user.Name)) { Users[user.Name] = user.Clone(); } else { Users.Add(user.Name, user.Clone()); } Changed?.Invoke(); } public void Delete(string userName) { DeleteFile(Equipment.infoFilePath + _filePath + userName + _extension); if (Users.ContainsKey(userName)) { Users.Remove(userName); } Changed?.Invoke(); } public bool ExistsUser(string userName) { if(_users.ContainsKey(userName)) { return true; } else { return false; } } public User GetUser(string userName) { if(ExistsUser(userName)) { return _users[userName].Clone(); } else { return null; } } public User[] GetUserList() { List userList = new List(); foreach(User user in Users.Values) { userList.Add(user.Clone()); } return userList.ToArray(); } } }