////////////////////////////////////////////////// ///// STRUCTORS ////////////////////////////////// public UserSession(string username, string address, double lifeSpan, IUserPortalServerController_Callback callbackChannel, User userData) : base(username, address, lifeSpan) { if (callbackChannel == null) { throw new ArgumentNullException("callbackChannel cannot be null"); } if (userData == null) { throw new ArgumentNullException("userData cannot be null"); } CallbackChannel = callbackChannel; UserData = userData; }
/* returns null if: * - already logged in * - database connection failed * - database authentication failed * - user data is null * - username is null */ public string Login(string address, string username, string password, out ECode ec) { ec = ECode.None; string token = null; IUserPortalServerController_Callback callbackChannel = OperationContext.Current.GetCallbackChannel <IUserPortalServerController_Callback>(); try { // Check credentials against database // int id = DSConnection.AuthenticateCredentials(username, password); if (id != -1) // valid { // Check if already logged in // if (UserRegistry.IsPuidRegistered(username) == false) { // Log in User // User user = DSConnection.GetUser(id); UserSession session = new UserSession(username, address, USER_LIFESPAN, callbackChannel, user); token = UserRegistry.RegisterClient(session); Console.WriteLine("> New Login: @username:{" + username + "} token:{" + token + "}"); } else { // Retrieve existing session token // token = UserRegistry.GetToken(username); ((UserSession)UserRegistry.GetClientSession(token)).CallbackChannel = callbackChannel; // update callback channel Console.WriteLine("> Old Login: @username:{" + username + "} token:{" + token + "}"); } } else { Console.WriteLine("> Failed Login: @username:{" + username + "}"); } } catch (DataServerException ex) { // occurs if any of the database queries fail ec = ex.ErrorCode; } catch (ArgumentNullException) { // occurs if username or user data is null ec = ECode.QueryError; } return(token); }