| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using Ryujinx.HLE.HOS.Kernel.Common;
- using Ryujinx.Horizon.Common;
- namespace Ryujinx.HLE.HOS.Kernel.Ipc
- {
- class KPort : KAutoObject
- {
- public KServerPort ServerPort { get; }
- public KClientPort ClientPort { get; }
- private string _name;
- private ChannelState _state;
- public bool IsLight { get; private set; }
- public KPort(KernelContext context, int maxSessions, bool isLight, string name) : base(context)
- {
- ServerPort = new KServerPort(context, this);
- ClientPort = new KClientPort(context, this, maxSessions);
- IsLight = isLight;
- _name = name;
- _state = ChannelState.Open;
- }
- public Result EnqueueIncomingSession(KServerSession session)
- {
- Result result;
- KernelContext.CriticalSection.Enter();
- if (_state == ChannelState.Open)
- {
- ServerPort.EnqueueIncomingSession(session);
- result = Result.Success;
- }
- else
- {
- result = KernelResult.PortClosed;
- }
- KernelContext.CriticalSection.Leave();
- return result;
- }
- public Result EnqueueIncomingLightSession(KLightServerSession session)
- {
- Result result;
- KernelContext.CriticalSection.Enter();
- if (_state == ChannelState.Open)
- {
- ServerPort.EnqueueIncomingLightSession(session);
- result = Result.Success;
- }
- else
- {
- result = KernelResult.PortClosed;
- }
- KernelContext.CriticalSection.Leave();
- return result;
- }
- }
- }
|