diff options
| author | Ac_K <Acoustik666@gmail.com> | 2023-01-08 13:13:39 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-08 12:13:39 +0000 |
| commit | 550747eac6c0f6da14070c8b6d208bde6f1d1eb9 (patch) | |
| tree | 1be203777156dae17a4221589c852c638b273d94 /Ryujinx.Horizon/ServiceTable.cs | |
| parent | 3ffceab1fb220c13f5982de599d788f2e3e7cc47 (diff) | |
Horizon: Impl Prepo, Fixes bugs, Clean things (#4220)
* 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/ServiceTable.cs')
| -rw-r--r-- | Ryujinx.Horizon/ServiceTable.cs | 46 |
1 files changed, 41 insertions, 5 deletions
diff --git a/Ryujinx.Horizon/ServiceTable.cs b/Ryujinx.Horizon/ServiceTable.cs index 933b6a59..2edc6ea1 100644 --- a/Ryujinx.Horizon/ServiceTable.cs +++ b/Ryujinx.Horizon/ServiceTable.cs @@ -1,22 +1,58 @@ using Ryujinx.Horizon.LogManager; +using Ryujinx.Horizon.Prepo; using System.Collections.Generic; +using System.Threading; namespace Ryujinx.Horizon { - public static class ServiceTable + public class ServiceTable { - public static IEnumerable<ServiceEntry> GetServices(HorizonOptions options) + private int _readyServices; + private int _totalServices; + + private readonly ManualResetEvent _servicesReadyEvent = new(false); + + public IEnumerable<ServiceEntry> GetServices(HorizonOptions options) { - List<ServiceEntry> entries = new List<ServiceEntry>(); + List<ServiceEntry> entries = new(); void RegisterService<T>() where T : IService { - entries.Add(new ServiceEntry(T.Main, options)); + entries.Add(new ServiceEntry(T.Main, this, options)); } RegisterService<LmMain>(); + RegisterService<PrepoMain>(); + + _totalServices = entries.Count; return entries; } + + internal void SignalServiceReady() + { + if (Interlocked.Increment(ref _readyServices) == _totalServices) + { + _servicesReadyEvent.Set(); + } + } + + public void WaitServicesReady() + { + _servicesReadyEvent.WaitOne(); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _servicesReadyEvent.Dispose(); + } + } + + public void Dispose() + { + Dispose(true); + } } -} +}
\ No newline at end of file |
