diff options
| author | Ac_K <Acoustik666@gmail.com> | 2019-06-16 00:35:38 +0200 |
|---|---|---|
| committer | Thomas Guillemard <me@thog.eu> | 2019-06-16 00:35:38 +0200 |
| commit | 5c1bc524092b3c5d867ce6204ac9db27b7359d3f (patch) | |
| tree | 6176a128cb171a0b58b8fe12da87a346d2acf2aa /Ryujinx.HLE/HOS/Services/Acc/Account | |
| parent | d8d5f2cbe703aa2ef2d1bb9211b3056da94b0168 (diff) | |
Refactoring of acc:u0 (#701)
* Refactoring of acc:u0
- Move all account things to the account service
- More accurate IAccountServiceForApplication
- Add helper to UInt128
* FIx my engrish
* FIx my engrish #2
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Acc/Account')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Acc/Account/AccountState.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Acc/Account/AccountUtils.cs | 68 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Acc/Account/UserProfile.cs | 37 |
3 files changed, 113 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Acc/Account/AccountState.cs b/Ryujinx.HLE/HOS/Services/Acc/Account/AccountState.cs new file mode 100644 index 00000000..7e7dd841 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Acc/Account/AccountState.cs @@ -0,0 +1,8 @@ +namespace Ryujinx.HLE.HOS.SystemState +{ + public enum AccountState + { + Closed, + Open + } +} diff --git a/Ryujinx.HLE/HOS/Services/Acc/Account/AccountUtils.cs b/Ryujinx.HLE/HOS/Services/Acc/Account/AccountUtils.cs new file mode 100644 index 00000000..5e7f4dac --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Acc/Account/AccountUtils.cs @@ -0,0 +1,68 @@ +using Ryujinx.HLE.HOS.SystemState; +using Ryujinx.HLE.Utilities; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; + +namespace Ryujinx.HLE.HOS.Services.Acc +{ + public class AccountUtils + { + private ConcurrentDictionary<string, UserProfile> _profiles; + + internal UserProfile LastOpenedUser { get; private set; } + + public AccountUtils() + { + _profiles = new ConcurrentDictionary<string, UserProfile>(); + } + + public void AddUser(UInt128 userId, string name) + { + UserProfile profile = new UserProfile(userId, name); + + _profiles.AddOrUpdate(userId.ToString(), profile, (key, old) => profile); + } + + public void OpenUser(UInt128 userId) + { + if (_profiles.TryGetValue(userId.ToString(), out UserProfile profile)) + { + (LastOpenedUser = profile).AccountState = AccountState.Open; + } + } + + public void CloseUser(UInt128 userId) + { + if (_profiles.TryGetValue(userId.ToString(), out UserProfile profile)) + { + profile.AccountState = AccountState.Closed; + } + } + + public int GetUserCount() + { + return _profiles.Count; + } + + internal bool TryGetUser(UInt128 userId, out UserProfile profile) + { + return _profiles.TryGetValue(userId.ToString(), out profile); + } + + internal IEnumerable<UserProfile> GetAllUsers() + { + return _profiles.Values; + } + + internal IEnumerable<UserProfile> GetOpenedUsers() + { + return _profiles.Values.Where(x => x.AccountState == AccountState.Open); + } + + internal UserProfile GetFirst() + { + return _profiles.First().Value; + } + } +}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Acc/Account/UserProfile.cs b/Ryujinx.HLE/HOS/Services/Acc/Account/UserProfile.cs new file mode 100644 index 00000000..179d6925 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Acc/Account/UserProfile.cs @@ -0,0 +1,37 @@ +using Ryujinx.HLE.Utilities; +using System; + +namespace Ryujinx.HLE.HOS.SystemState +{ + class UserProfile + { + private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); + + public UInt128 UserId { get; private set; } + + public string Name { get; private set; } + + public long LastModifiedTimestamp { get; private set; } + + public AccountState AccountState { get; set; } + public AccountState OnlinePlayState { get; set; } + + public UserProfile(UInt128 userId, string name) + { + UserId = userId; + Name = name; + + LastModifiedTimestamp = 0; + + AccountState = AccountState.Closed; + OnlinePlayState = AccountState.Closed; + + UpdateTimestamp(); + } + + private void UpdateTimestamp() + { + LastModifiedTimestamp = (long)(DateTime.Now - Epoch).TotalSeconds; + } + } +} |
