| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- using Ryujinx.HLE.HOS.Kernel.Common;
- using Ryujinx.HLE.HOS.Kernel.Process;
- namespace Ryujinx.HLE.HOS.Kernel.Ipc
- {
- class KSession : KAutoObject
- {
- public KServerSession ServerSession { get; }
- public KClientSession ClientSession { get; }
- private bool _hasBeenInitialized;
- public KSession(KernelContext context, KClientPort parentPort = null) : base(context)
- {
- IncrementReferenceCount();
- ServerSession = new KServerSession(context, this);
- ClientSession = new KClientSession(context, this, parentPort);
- _hasBeenInitialized = true;
- }
- public void DisconnectClient()
- {
- if (ClientSession.State == ChannelState.Open)
- {
- ClientSession.State = ChannelState.ClientDisconnected;
- ServerSession.CancelAllRequestsClientDisconnected();
- }
- }
- public void DisconnectServer()
- {
- if (ClientSession.State == ChannelState.Open)
- {
- ClientSession.State = ChannelState.ServerDisconnected;
- }
- }
- protected override void Destroy()
- {
- if (_hasBeenInitialized)
- {
- ClientSession.DisconnectFromPort();
- KProcess creatorProcess = ClientSession.CreatorProcess;
- creatorProcess.ResourceLimit?.Release(LimitableResource.Session, 1);
- creatorProcess.DecrementReferenceCount();
- }
- }
- }
- }
|