Esempio n. 1
0
        internal REstateMachine(
            IConnectorResolver <TState, TInput> connectorResolver,
            IRepositoryContextFactory <TState, TInput> repositoryContextFactory,
            ICartographer <TState, TInput> cartographer,
            IEnumerable <IEventListener> listeners,
            string machineId)
        {
            _connectorResolver        = connectorResolver;
            _repositoryContextFactory = repositoryContextFactory;
            _listeners = listeners.ToList();

            MachineId = machineId;

            CachedValues = new Lazy <Task <(ISchematic <TState, TInput> schematic, IReadOnlyDictionary <string, string> metadata)> >(
                async() =>
            {
                using (var context = await _repositoryContextFactory.OpenContextAsync(CancellationToken.None)
                                     .ConfigureAwait(false))
                {
                    var machineStatus = await context.Machines.GetMachineStatusAsync(machineId, CancellationToken.None)
                                        .ConfigureAwait(false);

                    return(machineStatus.Schematic,
                           new ReadOnlyDictionary <string, string>(machineStatus.Metadata));
                }
            });
        }
Esempio n. 2
0
        public async Task <ISchematic <TState, TInput> > GetSchematicAsync(
            string schematicName,
            CancellationToken cancellationToken = default)
        {
            Schematic <TState, TInput> schematic;

            using (var repositories = await _repositoryContextFactory
                                      .OpenContextAsync(cancellationToken).ConfigureAwait(false))
            {
                schematic = await repositories.Schematics
                            .RetrieveSchematicAsync(schematicName, cancellationToken)
                            .ConfigureAwait(false);
            }

            return(schematic);
        }