using System.Threading.Tasks; using RMC.Core.Exceptions; namespace RMC.Backend.Baas.Aws { /// /// The main entry point for this /// /// B.U.F.F. For Unity /// * Backend /// * Unity /// * Framework (For) /// * Firebase /// /// public class Buff : IBackendSystem { // Events ---------------------------------------- public BackendSystemEvent OnInitialized { get; } = new BackendSystemEvent(); // Properties ------------------------------------ public static Buff Instance { get { if (_Instance == null) { _Instance = new Buff(); } return _Instance; } } public bool IsInitialized { get { return _isInitialized; }} public IAccountsSubsystem AccountsSubsystem { get { return _accountsSubsystem; }} public ICloudCodeSubsystem CloudCodeSubsystem { get { return _cloudCodeSubsystem; }} public IDatabaseSubsystem DatabaseSubsystem { get { return _databaseSubsystem; }} // Fields ---------------------------------------- private static Buff _Instance = null; private bool _isInitialized = false; private readonly JawsAccountsSubsystem _accountsSubsystem; //TODO: Replace with new buff-type here... private readonly JawsCloudCodeSubsystem _cloudCodeSubsystem; //TODO: Replace with new buff-type here... private readonly JawsDatabaseSubsystem _databaseSubsystem; //TODO: Replace with new buff-type here... // Initialization -------------------------------- private Buff() { // Create all subsystems in constructor // To allow for any early subscriptions _accountsSubsystem = new JawsAccountsSubsystem(); _cloudCodeSubsystem = new JawsCloudCodeSubsystem(); _databaseSubsystem = new JawsDatabaseSubsystem(); } /// /// Initialize /// public async Task InitializeAsync() { if (_isInitialized) { return; } _isInitialized = true; // Initialize Subsystems await _accountsSubsystem.InitializeAsync(); await _cloudCodeSubsystem.InitializeAsync(); await _databaseSubsystem.InitializeAsync(); // OnInitialized.Invoke(this); } /// /// Require initialization. Usage is optional /// /// public void RequireIsInitialized() { if (!IsInitialized) { throw new NotInitializedException(this); } } // Methods --------------------------------------- } }