| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using Ryujinx.Horizon.LogManager;
- using Ryujinx.Horizon.Prepo;
- using System.Collections.Generic;
- using System.Threading;
- namespace Ryujinx.Horizon
- {
- public class ServiceTable
- {
- private int _readyServices;
- private int _totalServices;
- private readonly ManualResetEvent _servicesReadyEvent = new(false);
- public IEnumerable<ServiceEntry> GetServices(HorizonOptions options)
- {
- List<ServiceEntry> entries = new();
- void RegisterService<T>() where T : IService
- {
- 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);
- }
- }
- }
|