diff options
| author | Thomas Guillemard <me@thog.eu> | 2019-07-04 17:14:17 +0200 |
|---|---|---|
| committer | Ac_K <Acoustik666@gmail.com> | 2019-07-04 17:14:17 +0200 |
| commit | 789cdba8b51f310399752f7a1309e489fadf8dc1 (patch) | |
| tree | 7a0a596ea90dccad5f740708f2b22444c2d33a2d /Ryujinx.HLE/HOS/Services/Friend/NotificationEventHandler.cs | |
| parent | b2b736abc2569ab5d8199da666aef8d8394844a0 (diff) | |
Refactor the friend namespace (#721)
* Refactor the friend namespace and UInt128
This commit also:
- Fix GetFriendsList arguments ordering.
- Add GetFriendListIds.
- Expose the permission level of the port instance.
- InvalidUUID => InvalidArgument
* friend: add all cmds as commments
* add Friend structure layout
* Rename FriendErr to FriendError
* Accurately implement INotificationService
* Fix singleton lock of NotificationEventHandler
* Address comments
* Add comments for IDaemonSuspendSessionService cmds
* Explicitly define the Charset when needed
Also make "Nickname" a string
* Address gdk's comments
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Friend/NotificationEventHandler.cs')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Friend/NotificationEventHandler.cs | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Friend/NotificationEventHandler.cs b/Ryujinx.HLE/HOS/Services/Friend/NotificationEventHandler.cs new file mode 100644 index 00000000..8582a074 --- /dev/null +++ b/Ryujinx.HLE/HOS/Services/Friend/NotificationEventHandler.cs @@ -0,0 +1,83 @@ +using Ryujinx.HLE.Utilities; + +namespace Ryujinx.HLE.HOS.Services.Friend +{ + public sealed class NotificationEventHandler + { + private static NotificationEventHandler instance; + private static object instanceLock = new object(); + + private INotificationService[] _registry; + + public static NotificationEventHandler Instance + { + get + { + lock (instanceLock) + { + if (instance == null) + { + instance = new NotificationEventHandler(); + } + + return instance; + } + } + } + + NotificationEventHandler() + { + _registry = new INotificationService[0x20]; + } + + internal void RegisterNotificationService(INotificationService service) + { + // NOTE: in case there isn't space anymore in the registry array, Nintendo doesn't return any errors. + for (int i = 0; i < _registry.Length; i++) + { + if (_registry[i] == null) + { + _registry[i] = service; + break; + } + } + } + + internal void UnregisterNotificationService(INotificationService service) + { + // NOTE: in case there isn't the entry in the registry array, Nintendo doesn't return any errors. + for (int i = 0; i < _registry.Length; i++) + { + if (_registry[i] == service) + { + _registry[i] = null; + break; + } + } + } + + // TODO: Use this when we will have enough things to go online. + public void SignalFriendListUpdate(UInt128 targetId) + { + for (int i = 0; i < _registry.Length; i++) + { + if (_registry[i] != null) + { + _registry[i].SignalFriendListUpdate(targetId); + } + } + } + + // TODO: Use this when we will have enough things to go online. + public void SignalNewFriendRequest(UInt128 targetId) + { + for (int i = 0; i < _registry.Length; i++) + { + if (_registry[i] != null) + { + _registry[i].SignalNewFriendRequest(targetId); + } + } + } + } +} |
