aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2023-01-08 13:13:39 +0100
committerGitHub <noreply@github.com>2023-01-08 12:13:39 +0000
commit550747eac6c0f6da14070c8b6d208bde6f1d1eb9 (patch)
tree1be203777156dae17a4221589c852c638b273d94 /Ryujinx.Horizon/Sdk/Sf/Hipc/ServerManagerBase.cs
parent3ffceab1fb220c13f5982de599d788f2e3e7cc47 (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.cs33
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