Esempio n. 1
0
        public async Task AppendCommandResult(MazeTask mazeTask, CommandResult commandResult)
        {
            using (await _readerWriterLock.WriterLockAsync())
            {
                var file = _fileSystem.FileInfo.FromFileName(GetTaskDbFilename(mazeTask));
                file.Directory.Create();

                using (var dbStream = file.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite))
                    using (var db = new LiteDatabase(dbStream))
                    {
                        var results = db.GetCollection <CommandResult>(nameof(CommandResult));
                        results.Insert(commandResult);

                        await _requestTransmitter.Transmit(TaskExecutionsResource.CreateCommandResultRequest(commandResult));
                    }
            }
        }
Esempio n. 2
0
        public async Task StartExecution(MazeTask mazeTask, TaskSession taskSession, TaskExecution taskExecution)
        {
            using (await _readerWriterLock.WriterLockAsync())
            {
                var file = _fileSystem.FileInfo.FromFileName(GetTaskDbFilename(mazeTask));
                file.Directory.Create();

                var transmitterQueue = new TaskQueue();
                try
                {
                    using (var dbStream = file.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite))
                        using (var db = new LiteDatabase(dbStream))
                        {
                            var sessions = db.GetCollection <TaskSession>(nameof(TaskSession));
                            sessions.EnsureIndex(x => x.TaskSessionId, unique: true);

                            var taskSessionEntity = sessions.FindById(taskSession.TaskSessionId);
                            if (taskSessionEntity == null)
                            {
                                taskSessionEntity = new TaskSession
                                {
                                    TaskSessionId   = taskSession.TaskSessionId,
                                    TaskReferenceId = mazeTask.Id,
                                    Description     = taskSession.Description,
                                    CreatedOn       = DateTimeOffset.UtcNow
                                };
                                sessions.Insert(taskSessionEntity);

                                transmitterQueue.Enqueue(() => _requestTransmitter.Transmit(TaskSessionsResource.CreateSessionRequest(taskSessionEntity))).Forget();
                            }

                            taskExecution.TaskSessionId = taskSessionEntity.TaskSessionId;

                            var executions = db.GetCollection <TaskExecution>(nameof(TaskExecution));
                            taskExecution.TaskExecutionId = executions.Insert(taskExecution);

                            transmitterQueue.Enqueue(() => _requestTransmitter.Transmit(TaskExecutionsResource.CreateExecutionRequest(taskExecution))).Forget();
                        }
                }
                finally
                {
                    await transmitterQueue.DisposeAsync();
                }
            }
        }