| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- using Ryujinx.HLE.HOS.Kernel.Threading;
- using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy;
- using System.Collections.Concurrent;
- namespace Ryujinx.HLE.HOS.SystemState
- {
- class AppletStateMgr
- {
- private ConcurrentQueue<MessageInfo> _messages;
- public FocusState FocusState { get; private set; }
- public KEvent MessageEvent { get; }
- public IdDictionary AppletResourceUserIds { get; }
- public AppletStateMgr(Horizon system)
- {
- _messages = new ConcurrentQueue<MessageInfo>();
- MessageEvent = new KEvent(system.KernelContext);
- AppletResourceUserIds = new IdDictionary();
- }
- public void SetFocus(bool isFocused)
- {
- FocusState = isFocused
- ? FocusState.InFocus
- : FocusState.OutOfFocus;
- EnqueueMessage(MessageInfo.FocusStateChanged);
- }
- public void EnqueueMessage(MessageInfo message)
- {
- _messages.Enqueue(message);
- MessageEvent.ReadableEvent.Signal();
- }
- public bool TryDequeueMessage(out MessageInfo message)
- {
- if (_messages.Count < 2)
- {
- MessageEvent.ReadableEvent.Clear();
- }
- return _messages.TryDequeue(out message);
- }
- }
- }
|