internal PrioritizedQueue(string resetEventName, BackgroundServiceTask <T> serviceTask, ushort priority)
 {
     _itemWasReceivedSignal = new TaskEventWaitHandle(false, resetEventName, priority);
     SafeWaitHandle         = _itemWasReceivedSignal.SafeWaitHandle;
     serviceTask.AddResetEvent(_itemWasReceivedSignal);
     _itemWasReceivedSignal.Queue = this;
 }
Beispiel #2
0
        /// <summary>
        /// Called, when the job started.
        /// </summary>
        /// <param name="params"></param>
        /// <returns></returns>
        public override bool OnStartJob(JobParameters @params)
        {
            var jobs       = @params.Extras.GetStringArray("jobs");
            var encryption = @params.Extras.GetString("encryption");

            foreach (var item in jobs)
            {
                var job = JObject.Parse(item);

                //Create a new instance of the background job.
                var jobType = Type.GetType((string)job.GetValue("job"));
                if (jobType == null)
                {
                    JobFinished(@params, false);
                    return(false);
                }

                var encryptionKey = JsonConvert.DeserializeObject <EncryptionKey>(encryption);
                var backgroundJob = (BaseBackgroundJob)Activator.CreateInstance(jobType, (int)job.GetValue("id"), new DatabaseService(new Sqlite(), encryptionKey), new Notification());
                backgroundJob.Init((string)job.GetValue("data"));

                _parameters  = @params;
                _serviceTask = new BackgroundServiceTask(this);

                _serviceTask.Execute(backgroundJob);
            }

            return(true);
        }
Beispiel #3
0
        /// <summary>
        /// Called, if the job is stopped.
        /// </summary>
        /// <param name="params"></param>
        /// <returns></returns>
        public override bool OnStopJob(JobParameters @params)
        {
            if (_serviceTask != null && !_serviceTask.IsCancelled)
            {
                _serviceTask.Cancel(true);
            }
            _serviceTask = null;

            SendBroadcast();

            return(false);
        }