You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
5.7 KiB

  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Swift.DAL.SwiftDAL;
  4. namespace Swift.web.SwiftSystem.UserManagement.ApplicationUserPool
  5. {
  6. public class UserPool
  7. {
  8. private static UserPool Instance = new UserPool();
  9. private static readonly Dictionary<string, LoggedInUser> UserList = new Dictionary<string, LoggedInUser>();
  10. private UserPool()
  11. {
  12. }
  13. public DbResult MutipleRemoteLogin(LoggedInUser user)
  14. {
  15. var dbResult = new DbResult();
  16. if (!IsUserExists(user.UserName))
  17. UserList.Add(user.UserName, user);
  18. else
  19. {
  20. UserPool pool = GetInstance();
  21. var loggedInUsers = pool.GetLoggedInUsers();
  22. lock (UserList)
  23. {
  24. foreach (
  25. KeyValuePair<string, LoggedInUser> loggedInUser in
  26. loggedInUsers.ToList().Where(loggedInUser => loggedInUser.Value.UserName == user.UserName))
  27. {
  28. loggedInUser.Value.UserAccessLevel = "M";
  29. loggedInUser.Value.SessionID = user.SessionID;
  30. loggedInUser.Value.Browser = user.Browser;
  31. loggedInUser.Value.LastLoginTime = user.LastLoginTime;
  32. loggedInUser.Value.IPAddress = user.IPAddress;
  33. }
  34. }
  35. }
  36. dbResult.SetError("0", "Login Successful", user.UserName);
  37. return dbResult;
  38. }
  39. public DbResult AddUser(LoggedInUser user)
  40. {
  41. var dbResult = new DbResult();
  42. switch (user.UserAccessLevel)
  43. {
  44. case "M":
  45. if (!IsUserExists(user.UserName))
  46. {
  47. lock (UserList)
  48. {
  49. UserList.Add(user.UserName, user);
  50. }
  51. }
  52. else
  53. {
  54. UserPool pool = GetInstance();
  55. var loggedInUsers = pool.GetLoggedInUsers();
  56. lock (UserList)
  57. {
  58. foreach (
  59. var loggedInUser in
  60. loggedInUsers.ToList().Where(
  61. loggedInUser => loggedInUser.Value.UserName == user.UserName))
  62. {
  63. loggedInUser.Value.UserAccessLevel = user.UserAccessLevel;
  64. //loggedInUser.Value.DcInfo = user.DcInfo;
  65. loggedInUser.Value.SessionID = user.SessionID;
  66. loggedInUser.Value.Browser = user.Browser;
  67. loggedInUser.Value.LoginTime = user.LoginTime;
  68. loggedInUser.Value.LastLoginTime = user.LastLoginTime;
  69. loggedInUser.Value.IPAddress = user.IPAddress;
  70. }
  71. }
  72. }
  73. dbResult.SetError("0", "Login Successful", user.UserName);
  74. break;
  75. case "S":
  76. if (IsUserExists(user.UserName))
  77. dbResult.SetError("1", "User Already Logged In", user.UserName);
  78. else
  79. {
  80. lock (UserList)
  81. {
  82. UserList.Add(user.UserName, user);
  83. }
  84. dbResult.SetError("0", "Login Successful", user.UserName);
  85. }
  86. break;
  87. }
  88. return dbResult;
  89. }
  90. public void RemoveAllUser()
  91. {
  92. UserList.Clear();
  93. }
  94. public void RemoveUser(string username)
  95. {
  96. if (IsUserExists(username))
  97. {
  98. lock (UserList)
  99. {
  100. UserList.Remove(username);
  101. }
  102. }
  103. }
  104. public string GetUserBySessionId(string sessionId)
  105. {
  106. foreach (
  107. var loggedInUser in UserList.Values.ToList().Where(loggedInUser => loggedInUser.SessionID == sessionId))
  108. {
  109. return loggedInUser.UserName;
  110. }
  111. return "";
  112. }
  113. public bool IsUserExists(string username, string SessionID)
  114. {
  115. foreach (
  116. LoggedInUser loggedInUser in
  117. UserList.Values.Where(loggedInUser => loggedInUser.UserName == username && loggedInUser.SessionID == SessionID)) {
  118. return true;
  119. }
  120. return false;
  121. }
  122. public bool IsUserExists(string username)
  123. {
  124. if (UserList.ContainsKey(username))
  125. return true;
  126. return false;
  127. }
  128. public LoggedInUser GetUser(string username)
  129. {
  130. var user = new LoggedInUser();
  131. foreach (
  132. LoggedInUser loggedInUser in UserList.Values.Where(loggedInUser => loggedInUser.UserName == username))
  133. {
  134. return loggedInUser;
  135. }
  136. return user;
  137. }
  138. public Dictionary<string, LoggedInUser> GetLoggedInUsers()
  139. {
  140. return UserList;
  141. }
  142. public static UserPool GetInstance()
  143. {
  144. if (Instance == null)
  145. {
  146. lock (UserList)
  147. {
  148. if (Instance == null)
  149. return Instance = new UserPool();
  150. }
  151. }
  152. return Instance;
  153. }
  154. }
  155. }