diff options
author | Ac_K <Acoustik666@gmail.com> | 2023-01-08 13:13:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-08 12:13:39 +0000 |
commit | 550747eac6c0f6da14070c8b6d208bde6f1d1eb9 (patch) | |
tree | 1be203777156dae17a4221589c852c638b273d94 /Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs | |
parent | 3ffceab1fb220c13f5982de599d788f2e3e7cc47 (diff) |
Horizon: Impl Prepo, Fixes bugs, Clean things (#4220)1.1.519
* Horizon: Impl Prepo, Fixes bugs, Clean things
* remove ToArray()
* resultCode > status
* Remove old services
* Addresses gdkchan's comments and more cleanup
* Addresses Gdkchan's feedback 2
* Reorganize services, make sure service are loaded before guest
Co-Authored-By: gdkchan <5624669+gdkchan@users.noreply.github.com>
* Create interfaces for lm and sm
Co-authored-by: gdkchan <5624669+gdkchan@users.noreply.github.com>
Diffstat (limited to 'Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs')
-rw-r--r-- | Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs b/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs index 68cae6bc..9d21290d 100644 --- a/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs +++ b/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs @@ -26,7 +26,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc private enum UserDataTag { - Server = 1, + Server = 1, Session = 2 } @@ -36,16 +36,17 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc _canDeferInvokeRequest = options.CanDeferInvokeRequest; _multiWait = new MultiWait(); - _waitList = new MultiWait(); + _waitList = new MultiWait(); _multiWaitSelectionLock = new object(); - _waitListLock = new object(); + _waitListLock = new object(); _requestStopEvent = new Event(EventClearMode.ManualClear); - _notifyEvent = new Event(EventClearMode.ManualClear); + _notifyEvent = new Event(EventClearMode.ManualClear); _requestStopEventHolder = new MultiWaitHolderOfEvent(_requestStopEvent); _multiWait.LinkMultiWaitHolder(_requestStopEventHolder); + _notifyEventHolder = new MultiWaitHolderOfEvent(_notifyEvent); _multiWait.LinkMultiWaitHolder(_notifyEventHolder); } @@ -73,6 +74,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc private void RegisterServerImpl(int portIndex, ServiceObjectHolder staticHolder, int portHandle) { Server server = AllocateServer(portIndex, portHandle, ServiceName.Invalid, managed: false, staticHolder); + RegisterServerImpl(server); } @@ -86,6 +88,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc } Server server = AllocateServer(portIndex, portHandle, name, managed: true, staticHolder); + RegisterServerImpl(server); return Result.Success; @@ -103,6 +106,11 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc throw new NotSupportedException(); } + protected Result AcceptImpl(Server server, IServiceObject obj) + { + return AcceptSession(server.PortHandle, new ServiceObjectHolder(obj)); + } + public void ServiceRequests() { while (WaitAndProcessRequestsImpl()); @@ -175,7 +183,8 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc protected override void RegisterSessionToWaitList(ServerSession session) { session.HasReceived = false; - session.UserData = UserDataTag.Session; + session.UserData = UserDataTag.Session; + RegisterToWaitList(session); } @@ -198,15 +207,12 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc private Result Process(MultiWaitHolder holder) { - switch ((UserDataTag)holder.UserData) + return (UserDataTag)holder.UserData switch { - case UserDataTag.Server: - return ProcessForServer(holder); - case UserDataTag.Session: - return ProcessForSession(holder); - default: - throw new NotImplementedException(((UserDataTag)holder.UserData).ToString()); - } + UserDataTag.Server => ProcessForServer(holder), + UserDataTag.Session => ProcessForSession(holder), + _ => throw new NotImplementedException(((UserDataTag)holder.UserData).ToString()) + }; } private Result ProcessForServer(MultiWaitHolder holder) @@ -259,6 +265,7 @@ namespace Ryujinx.Horizon.Sdk.Sf.Hipc } session.HasReceived = true; + tlsMessage.Memory.Span.CopyTo(savedMessage.Memory.Span); } else |