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.
171 lines
5.7 KiB
171 lines
5.7 KiB
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Swift.DAL.SwiftDAL;
|
|
|
|
|
|
|
|
namespace Swift.web.SwiftSystem.UserManagement.ApplicationUserPool
|
|
{
|
|
public class UserPool
|
|
{
|
|
private static UserPool Instance = new UserPool();
|
|
private static readonly Dictionary<string, LoggedInUser> UserList = new Dictionary<string, LoggedInUser>();
|
|
|
|
private UserPool()
|
|
{
|
|
}
|
|
|
|
public DbResult MutipleRemoteLogin(LoggedInUser user)
|
|
{
|
|
var dbResult = new DbResult();
|
|
|
|
if (!IsUserExists(user.UserName))
|
|
UserList.Add(user.UserName, user);
|
|
else
|
|
{
|
|
UserPool pool = GetInstance();
|
|
var loggedInUsers = pool.GetLoggedInUsers();
|
|
|
|
lock (UserList)
|
|
{
|
|
foreach (
|
|
KeyValuePair<string, LoggedInUser> loggedInUser in
|
|
loggedInUsers.ToList().Where(loggedInUser => loggedInUser.Value.UserName == user.UserName))
|
|
{
|
|
loggedInUser.Value.UserAccessLevel = "M";
|
|
loggedInUser.Value.SessionID = user.SessionID;
|
|
loggedInUser.Value.Browser = user.Browser;
|
|
loggedInUser.Value.LastLoginTime = user.LastLoginTime;
|
|
loggedInUser.Value.IPAddress = user.IPAddress;
|
|
}
|
|
}
|
|
}
|
|
dbResult.SetError("0", "Login Successful", user.UserName);
|
|
return dbResult;
|
|
}
|
|
|
|
public DbResult AddUser(LoggedInUser user)
|
|
{
|
|
var dbResult = new DbResult();
|
|
switch (user.UserAccessLevel)
|
|
{
|
|
case "M":
|
|
if (!IsUserExists(user.UserName))
|
|
{
|
|
lock (UserList)
|
|
{
|
|
UserList.Add(user.UserName, user);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
UserPool pool = GetInstance();
|
|
var loggedInUsers = pool.GetLoggedInUsers();
|
|
|
|
lock (UserList)
|
|
{
|
|
foreach (
|
|
var loggedInUser in
|
|
loggedInUsers.ToList().Where(
|
|
loggedInUser => loggedInUser.Value.UserName == user.UserName))
|
|
{
|
|
loggedInUser.Value.UserAccessLevel = user.UserAccessLevel;
|
|
//loggedInUser.Value.DcInfo = user.DcInfo;
|
|
loggedInUser.Value.SessionID = user.SessionID;
|
|
loggedInUser.Value.Browser = user.Browser;
|
|
loggedInUser.Value.LoginTime = user.LoginTime;
|
|
loggedInUser.Value.LastLoginTime = user.LastLoginTime;
|
|
loggedInUser.Value.IPAddress = user.IPAddress;
|
|
}
|
|
}
|
|
}
|
|
dbResult.SetError("0", "Login Successful", user.UserName);
|
|
break;
|
|
case "S":
|
|
if (IsUserExists(user.UserName))
|
|
dbResult.SetError("1", "User Already Logged In", user.UserName);
|
|
else
|
|
{
|
|
lock (UserList)
|
|
{
|
|
UserList.Add(user.UserName, user);
|
|
}
|
|
dbResult.SetError("0", "Login Successful", user.UserName);
|
|
}
|
|
break;
|
|
}
|
|
return dbResult;
|
|
}
|
|
|
|
public void RemoveAllUser()
|
|
{
|
|
UserList.Clear();
|
|
}
|
|
public void RemoveUser(string username)
|
|
{
|
|
if (IsUserExists(username))
|
|
{
|
|
lock (UserList)
|
|
{
|
|
UserList.Remove(username);
|
|
}
|
|
}
|
|
}
|
|
|
|
public string GetUserBySessionId(string sessionId)
|
|
{
|
|
foreach (
|
|
var loggedInUser in UserList.Values.ToList().Where(loggedInUser => loggedInUser.SessionID == sessionId))
|
|
{
|
|
return loggedInUser.UserName;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public bool IsUserExists(string username, string SessionID)
|
|
{
|
|
foreach (
|
|
LoggedInUser loggedInUser in
|
|
UserList.Values.Where(loggedInUser => loggedInUser.UserName == username && loggedInUser.SessionID == SessionID)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public bool IsUserExists(string username)
|
|
{
|
|
if (UserList.ContainsKey(username))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public LoggedInUser GetUser(string username)
|
|
{
|
|
var user = new LoggedInUser();
|
|
foreach (
|
|
LoggedInUser loggedInUser in UserList.Values.Where(loggedInUser => loggedInUser.UserName == username))
|
|
{
|
|
return loggedInUser;
|
|
}
|
|
return user;
|
|
}
|
|
|
|
public Dictionary<string, LoggedInUser> GetLoggedInUsers()
|
|
{
|
|
return UserList;
|
|
}
|
|
|
|
public static UserPool GetInstance()
|
|
{
|
|
if (Instance == null)
|
|
{
|
|
lock (UserList)
|
|
{
|
|
if (Instance == null)
|
|
return Instance = new UserPool();
|
|
}
|
|
}
|
|
return Instance;
|
|
}
|
|
}
|
|
}
|