ryujinx/Ryujinx.HLE/HOS/UserChannelPersistence.cs
Mary 33f8284bc0
hle/ui: Basic multi programs support (#1560)
* hos/gui: Add a check of NCA program index in titleid

This add a check to `ApplicationLoader` for the last 2 digits of the game TitleId who seems to be the NCA program index.
We currently return the last index, instead of the lower one.
Same check is added to ApplicationLibrary in the UI.

I've cleaned up both file too.

* hle: implement partial relaunch logic

TODO: make the emulator auto relauch.

* Handle auto relaunch

* hle: Unify update usage system

* hle: Implement support of multi programs in update system

* Add some documentation

* Address rip's comment

Co-authored-by: Ac_K <Acoustik666@gmail.com>
2020-09-21 13:45:30 +10:00

57 lines
1.5 KiB
C#

using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types;
using System;
using System.Collections.Generic;
namespace Ryujinx.HLE.HOS
{
public class UserChannelPersistence
{
private Stack<byte[]> _userChannelStorages;
public int PreviousIndex { get; private set; }
public int Index { get; private set; }
public ProgramSpecifyKind Kind { get; private set; }
public UserChannelPersistence()
{
_userChannelStorages = new Stack<byte[]>();
Kind = ProgramSpecifyKind.ExecuteProgram;
PreviousIndex = -1;
Index = 0;
}
public void Clear()
{
_userChannelStorages.Clear();
}
public void Push(byte[] data)
{
_userChannelStorages.Push(data);
}
public byte[] Pop()
{
return _userChannelStorages.Pop();
}
public bool IsEmpty => _userChannelStorages.Count == 0;
public void ExecuteProgram(ProgramSpecifyKind kind, ulong value)
{
Kind = kind;
PreviousIndex = Index;
switch (kind)
{
case ProgramSpecifyKind.ExecuteProgram:
Index = (int)value;
break;
case ProgramSpecifyKind.RestartProgram:
break;
default:
throw new NotImplementedException($"{kind} not implemented");
}
}
}
}