Example #1
0
        /// <summary>
        /// Start new <c>task</c>.
        /// </summary>
        /// <param name="queueName">The queue's name.</param>
        /// <param name="task">The <see cref="Expression"/> instance.</param>
        /// <param name="scheduleStrategy">Schedule</param>
        /// <returns>The task's identifier.</returns>
        public int StartTask(string queueName, Expression <Action> task, IScheduleStrategy scheduleStrategy)
        {
            using (IUnitOfWork unitOfWork = unitOfWorkFactory.CreateUnitOfWork(contextSettings))
            {
                ActivationData activationData = expressionConverter.Convert(task);

                string[] args = expressionConverter.SerializeArguments(activationData.Arguments);

                TaskInfo entity = new TaskInfo
                {
                    QueueName        = queueName,
                    InstanceType     = jsonConverter.ConvertToJson(activationData.InstanceType),
                    Method           = activationData.Method.Name,
                    ParametersTypes  = jsonConverter.ConvertToJson(activationData.ArgumentTypes),
                    Arguments        = jsonConverter.ConvertToJson(args),
                    TaskState        = TaskStates.New,
                    ExecuteAt        = scheduleStrategy.GetNextExecutionTime(DateTime.UtcNow, TaskStates.New),
                    RepeatCrashCount = 3 //TODO: Settings
                };

                switch (scheduleStrategy.ScheduleType)
                {
                case ScheduleType.Immediately:
                case ScheduleType.ExecuteAt:
                {
                    entity.ScheduleInfoId = -1;
                    break;
                }

                default:
                {
                    ScheduleInfo scheduleInfo = new ScheduleInfo
                    {
                        ScheduleType     = scheduleStrategy.ScheduleType,
                        ScheduleData     = jsonConverter.ConvertToJson(scheduleStrategy),
                        ScheduleDataType = jsonConverter.ConvertToJson(scheduleStrategy.GetType())
                    };
                    unitOfWork.Insert(scheduleInfo);
                    entity.ScheduleInfoId = scheduleInfo.Id;
                    break;
                }
                }

                unitOfWork.Insert(entity);
                unitOfWork.Commit();

                return(entity.Id);
            }
        }
        public string GetData()
        {
            var xmlData = base.GetData();
            var resData = jsonConverter.ConvertToJson(xmlData);

            return(resData);
        }
Example #3
0
        /// <summary>
        /// Convert task model into the task entity.
        /// </summary>
        /// <param name="taskModel">The <see cref="TaskModel"/> instance.</param>
        /// <returns>The <see cref="TaskEntity"/> instance.</returns>
        public TaskEntity Convert(TaskModel taskModel)
        {
            logger.WriteTrace("Converting {0} into the TaskEntity...", taskModel);

            string[] args = expressionConverter.SerializeArguments(taskModel.ActivationData.Arguments);

            TaskEntity entity = new TaskEntity
            {
                Id               = taskModel.Id,
                QueueId          = taskModel.QueueId,
                InstanceType     = jsonConverter.ConvertToJson(taskModel.ActivationData.InstanceType),
                Method           = taskModel.ActivationData.Method.Name,
                ParametersTypes  = jsonConverter.ConvertToJson(taskModel.ActivationData.ArgumentTypes),
                Arguments        = jsonConverter.ConvertToJson(args),
                TaskState        = taskModel.TaskState,
                RepeatCrashCount = taskModel.ScheduleInformation.RepeatCrashCount
            };

            logger.WriteTrace("Converting {0} into the TaskEntity has been successfully completed. Result = {1}", taskModel, entity);

            return(entity);
        }
        public string[] SerializeArguments(IReadOnlyCollection <object> arguments)
        {
            var serializedArguments = new List <string>(arguments.Count);

            foreach (var argument in arguments)
            {
                string value;

                if (argument != null)
                {
                    if (argument is DateTime)
                    {
                        value = ((DateTime)argument).ToString("o", CultureInfo.InvariantCulture);
                    }
                    else if (argument is CancellationToken)
                    {
                        // CancellationToken type instances are substituted with ShutdownToken
                        // during the background job performance, so we don't need to store
                        // their values.
                        value = null;
                    }
                    else
                    {
                        value = jsonConverter.ConvertToJson(argument);
                    }
                }
                else
                {
                    value = null;
                }

                // Logic, related to optional parameters and their default values,
                // can be skipped, because it is impossible to omit them in
                // lambda-expressions (leads to a compile-time error).

                serializedArguments.Add(value);
            }

            return(serializedArguments.ToArray());
        }
 public void ConvertXmlToJson()
 {
     _jsonConverter.ConvertToJson();
 }