Example #1
0
        public async Task Enqueue <T, TData>(TData data) where T : IJob where TData : new()
        {
            var job = new JobV1
            {
                QueuedOn    = DateTimeOffset.UtcNow,
                JobType     = typeof(T).AssemblyQualifiedName,
                JobDataType = typeof(TData).AssemblyQualifiedName,
                JobData     = JsonConvert.SerializeObject(data)
            };

            using (var connection = new ConScope(_dataService))
            {
                using (var transaction = await connection.BeginTransaction())
                {
                    await connection.Connection.SaveAsync(job);

                    transaction.Commit();
                }
            }

            await _jobEnqueued.Publish(this, new JobEnqueuedEvent(new JobTask
            {
                JobId = job.Id,
                Type = typeof(T),
                Data = data
            }));
        }
Example #2
0
        public async Task MarkJobSucceeded(int jobId)
        {
            JobV1 job;

            using (var connection = new ConScope(_dataService))
            {
                using (var transaction = await connection.BeginTransaction())
                {
                    job = await connection.Connection.SingleByIdAsync <JobV1>(jobId);

                    if (job == null)
                    {
                        throw new Exception($"Invalid job id {jobId}");
                    }

                    if (job.Status != JobStatus.Processing)
                    {
                        throw new Exception($"Can't mark a job {jobId} as completed because it wasn't marked as processing.");
                    }

                    await connection.Connection.DeleteAsync(job);

                    transaction.Commit();
                }
            }

            await _jobSucceeded.Publish(this, new JobSucceededEvent(new JobTask
            {
                JobId = job.Id,
                Type = Type.GetType(job.JobType),
                Data = JsonConvert.DeserializeObject(job.JobData, Type.GetType(job.JobDataType))
            }));
        }
Example #3
0
        public async Task SaveSettings(Action <T> settings)
        {
            var instance = default(T);
            await _settingsService.SaveSetting <T>(x =>
            {
                settings(x);
                instance = x;
            });

            await _settingsUpdated.Publish(this, instance);
        }