示例#1
0
        public void Complete(ISchedulerContext context, bool wasCancelled)
        {
            if (context.Guild == null)
            {
                return;
            }

            var data     = TitanLordTimerData.FromJson(context.Record.Data);
            var settings = context.GuildSettings.Get <TitanLordSettings>(data.GroupId);

            var messageChannel = context.Client.GetChannel(data.MessageChannelId) as IMessageChannel;

            if (messageChannel == null || context.Author == null)
            {
                return;
            }

            if (data.MessageId != 0)
            {
                var message = messageChannel?.GetMessageAsync(data.MessageId)?.Result as IUserMessage;
                message?.DeleteAsync().Wait();
            }

            if (!wasCancelled)
            {
                context.Replier.Reply(messageChannel, context.Author).WithMessage((RawString)settings.NowText.Contextualise(settings.CQ,
                                                                                                                            context.Record,
                                                                                                                            context.Record.EndTime,
                                                                                                                            context.GeneralGuildSetting.DateTimeFormat)).Send();
                var history = Database?.AddOrGet(context.Guild.Id, () => new TitanLordHistory()).Result;
                history?.SpawnTimes.Add(context.CycleTime);
                Database?.Upsert(history);
            }
        }
示例#2
0
 public void Complete(ISchedulerContext context, bool wasCancelled)
 {
     if (!wasCancelled)
     {
         Handle(context);
     }
 }
示例#3
0
            public void Handle(ISchedulerContext context)
            {
                var endAt = DateTime.Now.AddMilliseconds(200);

                while (DateTime.Now < endAt)
                {
                }
            }
示例#4
0
        public static JobItem Create(ISchedulerContext ctx)
        {
            var definition = JobFactory.Interval("Foo1", () =>
            {
                return(Task.Factory.StartNew(() => Console.WriteLine("Foo1")));
            }, TimeSpan.FromMinutes(10), "Some");

            return(new InlineScheduler.Advanced.JobItemFactory(ctx).Create(definition));
        }
        public DateTime? NextExecution(IJobState state, ISchedulerContext context)
        {
            if (state.Status != JobStatus.Pending)
            {
                return null; // Have no clue
            }

            return context.GetCurrentTime().Date.Add(_dayTime);
        }
示例#6
0
        public Scheduler(ISchedulerContext context = null)
        {
            context   = context ?? new DefaultSchedulerContext();
            _work     = new JobManager(context);
            _stopped  = true;
            _sartTime = DateTime.Now;

            // Start timer
            _timer = new Timer(OnTimerElapsed);
            _timer.Change(TimeSpan.Zero, TimeSpan.FromMilliseconds(1000));
        }
        public Scheduler(ISchedulerContext context = null)
        {
            context = context ?? new DefaultSchedulerContext();
            _work = new JobManager(context);
            _stopped = true;
            _sartTime = DateTime.Now;

            // Start timer
            _timer = new Timer(OnTimerElapsed);
            _timer.Change(TimeSpan.Zero, TimeSpan.FromMilliseconds(1000));
        }
        public DiscoverCoreAssembliesBehavior(ExportExampleViewModel target, ISchedulerContext schedulerContext)
            : base(target)
        {
            Target.LibrariesPath = ExportExampleHelper.TryAutomaticallyFindAssemblies();

            Target.WhenPropertyChanged(x => x.LibrariesPath)
            .Where(x => !string.IsNullOrEmpty(x))
            .Select(ExportExampleHelper.SearchForCoreAssemblies)
            .ObserveOn(schedulerContext.Dispatcher)
            .Subscribe(b => Target.IsAssemblyOk = b)
            .DisposeWith(this);
        }
        public Task <SimpleWorkflowResult> Start(ISchedulerContext schedulerContext, object input)
        {
            var s = schedulerContext.Default;

            var task = Task.Factory.StartNew(() => TaskBody(input), s);

            if (_subsequentStep != null)
            {
                task.Then(r => _subsequentStep.Start(schedulerContext, r.Result), s);
            }
            return(task);
        }
示例#10
0
        /// <summary>
        /// Asynchronously executes the action using <see cref="RpcClient"/>.
        /// </summary>
        /// <param name="serviceProvider">Dependency injection container for resolving services.</param>
        /// <param name="context">Scheduler context for executing actions.</param>
        /// <returns><c>Task</c> object executing the action.</returns>
        /// <exception cref="InvalidOperationException"><see cref="RpcClient"/> object is not configured.</exception>
        public async Task Execute(IServiceProvider serviceProvider, ISchedulerContext context)
        {
            var client = serviceProvider.GetService(typeof(RpcClient)) as RpcClient;

            if (client == null)
            {
                throw new InvalidOperationException("RpcClient service not configured");
            }

            _parameters = _parameterResolver(context);

            ActionStartTS   = DateTime.Now;
            ActionSkip      = _canSkipPredicate(context);
            ActionProcessed = false;
            ActionError     = false;

            if (!ActionSkip)
            {
                try
                {
                    XElement requestData = _messageDataResolver(context);
                    List <MessageParameter> requestParameters = new List <MessageParameter>();

                    foreach (var paramKey in _parameters.Keys)
                    {
                        requestParameters.Add(new MessageParameter(paramKey, _parameters[paramKey]));
                    }

                    RequestMessage  request  = new RequestMessage(ActionCode, requestData, requestParameters);
                    ResponseMessage response = await client.Execute(request, SecondsTimeout);

                    context.AppendContextData(this, response.Data);

                    ActionProcessed = true;
                }
                catch (Exception ex)
                {
                    ErrorMessage = ex.Message;
                    ActionError  = true;
                }
            }
            else
            {
                ActionProcessed = true;
            }

            ActionEndTS = DateTime.Now;

            if (ActionProcessed)
            {
                _postProcessing(context);
            }
        }
示例#11
0
        public JobItem(ISchedulerContext context, JobDefinition definition, WorkState presavedState = null)
        {
            _context    = context;
            _definition = definition;
            _created    = _context.GetCurrentTime();

            if (presavedState != null)
            {
                _lastCompleteTime = presavedState.LastCompleteTime;
            }

            UpdateState();
        }
        public JobItem(ISchedulerContext context, JobDefinition definition, WorkState presavedState = null)
        {
            _context = context;
            _definition = definition;
            _created = _context.GetCurrentTime();

            if (presavedState != null)
            {
                _lastCompleteTime = presavedState.LastCompleteTime;
            }

            UpdateState();
        }
示例#13
0
        public bool Handle(ISchedulerContext context)
        {
            if (_lastCall.TryGetValue(context.Record.Id, out var lastTime) && lastTime > DateTime.Now.AddSeconds(-5))
            {
                return(true);
            }

            _lastCall.AddOrUpdate(context.Record.Id, DateTime.Now, (u, d) => DateTime.Now > d ? DateTime.Now : d);

            if (context.Guild == null)
            {
                return(false);
            }

            var data     = TitanLordTimerData.FromJson(context.Record.Data);
            var settings = context.GuildSettings.Get <TitanLordSettings>(data.GroupId);

            var actualTime = context.Record.EndTime.AddTicks(-((context.Record.EndTime - context.CycleTime + context.Delay).Ticks / context.Record.Interval.Ticks) * context.Record.Interval.Ticks);

            var messageChannel = context.Client.GetChannel(data.MessageChannelId) as IMessageChannel;

            if (messageChannel == null || context.Author == null)
            {
                return(false);
            }

            if (data.MessageId != 0)
            {
                if (messageChannel?.GetMessageAsync(data.MessageId)?.Result is IUserMessage message)
                {
                    context.Replier.Modify(message, context.Author).ChangeMessage((RawString)settings.TimerText.Contextualise(settings.CQ,
                                                                                                                              context.Record,
                                                                                                                              actualTime,
                                                                                                                              context.GeneralGuildSetting.DateTimeFormat)).Modify();
                }
            }

            foreach (var ping in settings.PrePings)
            {
                var pingTime = context.Record.EndTime.AddTicks(-ping * TimeSpan.TicksPerSecond);
                if (pingTime.Between(context.CycleTime, context.CycleTime + context.Delay + context.Record.Interval))
                {
                    context.Replier.Reply(messageChannel, context.Author).WithMessage((RawString)settings.InXText.Contextualise(settings.CQ,
                                                                                                                                context.Record,
                                                                                                                                pingTime,
                                                                                                                                context.GeneralGuildSetting.DateTimeFormat)).Send();
                }
            }

            return(true);
        }
示例#14
0
        public DateTime?NextExecution(IJobState state, ISchedulerContext context)
        {
            if (state.Status != JobStatus.Pending)
            {
                return(null); // Have no clue
            }

            if (state.LastComplete != null)
            {
                return(state.LastComplete.Value.Date.AddDays(1).Add(_dayTime));
            }

            return(context.GetCurrentTime().Date.Add(_dayTime));
        }
        public DateTime? NextExecution(IJobState state, ISchedulerContext context)
        {
            if (state.Status != JobStatus.Pending)
            {
                return null; // Have no clue
            }

            if (state.LastComplete != null)
            {
                return state.LastComplete.Value.Date.AddDays(1).Add(_dayTime);
            }

            return context.GetCurrentTime().Date.Add(_dayTime);
        }
示例#16
0
        public AutoCompleteSearchBehaviour(MainWindowViewModel target, ISchedulerContext schedulerContext, IExampleSearchProvider searchProvider, IModule module)
            : base(target)
        {
            _searchProvider = searchProvider;
            _module         = module;

            var searchTextObs = Target.WhenPropertyChanged(x => x.SearchText);

            searchTextObs.Skip(1).Subscribe(UpdateBlurEffect).DisposeWith(this);

            searchTextObs.Where(x => !String.IsNullOrEmpty(x))
            .Throttle(TimeSpan.FromMilliseconds(200), schedulerContext.Default)
            .Select(SearchExamples)
            .ObserveOn(schedulerContext.Dispatcher)
            .Subscribe(UpdateSearchResults)
            .DisposeWith(this);
        }
示例#17
0
        public DateTime?NextExecution(IJobState state, ISchedulerContext context)
        {
            if (state.Status != JobStatus.Pending)
            {
                return(null); // Have no clue
            }

            if (state.LastComplete != null)
            {
                return(state.LastComplete + _interval);
            }
            else
            {
                var shift = context.GetNextRandom(200, (int)_interval.TotalMilliseconds / 3);
                return(state.Created.AddMilliseconds(shift));
            }
        }
示例#18
0
        public async void Complete(ISchedulerContext context, bool wasCancelled)
        {
            var message = context.Record.Data;

            if (string.IsNullOrWhiteSpace(message))
            {
                return;
            }
            var channel = await context.Author?.GetOrCreateDMChannelAsync();

            if (channel == null)
            {
                return;
            }

            var timespan = DateTime.Now - context.Record.StartTime;
            await context.Replier.Reply(channel, context.Author).WithMessage(new RawString("{0} ago you asked me to remind you this:\n{1}", timespan, message)).SendAsync();
        }
        public override void OnMapRequest(PLAggregatorDecisionRequest request, ISchedulerContext context)
        {
            policyCheckerAction = (new PolicyCheckerAction())
                                  .WithParameters((schedulerContext) =>
            {
                var parameters = new Dictionary <string, object>();

                parameters.Add("FIRST_NAME", request.FirstName);
                parameters.Add("LAST_NAME", request.LastName);
                parameters.Add("DOB", request.DOB.Date);
                parameters.Add("POSTCODE", request.Postcode);

                return(parameters);
            });

            getSoftQuoteAction = (new GetSoftQuoteAction())
                                 .WithMessageData((schedulerContext) =>
            {
                XElement data = new XElement("ApplicantData");
                data.Add(new XElement("FIRST_NAME", request.FirstName));
                data.Add(new XElement("LAST_NAME", request.LastName));
                data.Add(new XElement("DOB", request.DOB.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)));
                data.Add(new XElement("POSTCODE", request.Postcode));

                return(data);
            })
                                 .WithSkipCondition((schedulerContext) =>
            {
                var policyCheckerResult = schedulerContext.GetActionDataById(policyCheckerAction.Id);
                var policyRules         = policyCheckerResult.Descendants("PolicyRules").FirstOrDefault();

                if (policyRules != null && policyRules.Attribute("Status").Value == "PASSED")
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            });

            context.AppendAction(policyCheckerAction);
            context.AppendAction(getSoftQuoteAction);
        }
示例#20
0
        /// <summary>
        /// Executes the actions configured in the scheduler context.
        /// </summary>
        /// <param name="request">Instance of the request object.</param>
        /// <param name="context">Scheduler execution context.</param>
        /// <returns><c>Task</c> object that completes when all the actions in the scheduler context finishes.</returns>
        public async Task <RESPONSE> Execute(REQUEST request, ISchedulerContext context)
        {
            context.LogStartTime();

            OnMapRequest(request, context);
            await context.ExecuteActions();

            context.LogEndTime();

            if (context.Status == "ERROR")
            {
                throw new Exception(context.ErrorMessage);
            }
            else
            {
                RESPONSE response = OnMapResponse(context);
                return(response);
            }
        }
        public InitializationBehaviour(MainWindowViewModel target, IModule module, ISchedulerContext schedulerContext)
            : base(target)
        {
            _module = module;

            Task.Factory.StartNew(() =>
            {
                CreateInvertedIndex.CreateIndex(_module.Examples);
                CreateInvertedIndex.CreateIndexForCode(_module.Examples);
            })
            .Then(() => Target.SearchBoxEnabled = true)
            .Catch(ex => target.Exception       = new ExceptionViewModel("Initialization Error", ex.Flatten()));

            var groupsByCategory = _module.GroupsByCategory;

            Target.Categories = groupsByCategory.Select(y => new ExampleCategoryViewModel()
            {
                Category = y.Key, Groups = y.Value
            }).ToList();
            int midCount = (Target.Categories.Count() - 1) / 2;

            if (midCount >= 0 && midCount < Target.Categories.Count())
            {
                Target.SelectedCategory = Target.Categories.ElementAt(midCount);
            }

            Target.EverythingViewModel = new EverythingViewModel();

            Target.WhenPropertyChanged(x => x.SelectedCategory)
            .Do(_ => Target.IsBusy = true)
            .Throttle(TimeSpan.FromMilliseconds(500))
            .Do(c => Target.EverythingViewModel.SelectedCategory = c != null ? c.Category : null)
            .Delay(TimeSpan.FromMilliseconds(200), schedulerContext.Default)
            .ObserveOn(schedulerContext.Dispatcher)
            .Subscribe(_ => Target.IsBusy = false)
            .DisposeWith(this);

            Target.WhenPropertyChanged(x => x.IsBusy)
            .Skip(1)
            .Subscribe(b => Target.BlurBackgroundParams = b ? _blurredParams : _defaultParams)
            .DisposeWith(this);
        }
        public SearchExamplesBehaviour(MainViewModel target, ISchedulerContext schedulerContext) : base(target)
        {
            var assembly = typeof(MainWindow).Assembly;

            _exampleTypes = assembly.GetTypes()
                            .Select(type => new ExampleCache {
                Type = type, Attribute = (TestCaseAttribute)type.GetCustomAttributes(typeof(TestCaseAttribute), false).FirstOrDefault()
            })
                            .Where(tuple => tuple.Attribute != null)
                            .ToList();

            Target.RunExampleCommand = new ActionCommand(OnRunExample, () => Target.SelectedExample != null);

            Target.WhenPropertyChanged(x => x.FilterText)
            .Throttle(TimeSpan.FromMilliseconds(250), schedulerContext.Default)
            .Select(DiscoverExamples)
            .ObserveOn(schedulerContext.Dispatcher)
            .Subscribe(UpdateExamples)
            .DisposeWith(this);
        }
示例#23
0
        public bool Handle(ISchedulerContext context)
        {
            if (context.Guild == null)
            {
                return(false);
            }

            var data     = TitanLordTimerData.FromJson(context.Record.Data);
            var settings = context.GuildSettings.Get <TitanLordSettings>(data.GroupId);

            var messageChannel = context.Client.GetChannel(data.MessageChannelId) as IMessageChannel;

            if (settings.RoundPings && messageChannel != null && context.Author != null)
            {
                context.Replier.Reply(messageChannel, context.Author).WithMessage((RawString)settings.RoundText.Contextualise(settings.CQ,
                                                                                                                              context.Record,
                                                                                                                              context.CycleTime,
                                                                                                                              context.GeneralGuildSetting.DateTimeFormat)).Send();
            }

            return(true);
        }
        public override PLAggregatorDecisionResponse OnMapResponse(ISchedulerContext context)
        {
            var result = new PLAggregatorDecisionResponse();

            if (!getSoftQuoteAction.ActionError && !getSoftQuoteAction.ActionSkip)
            {
                var actionData = context.GetActionDataById(getSoftQuoteAction.Id);
                result.Decision = actionData.Descendants("Decision").First().Value;
                if (result.Decision != "DECLINE")
                {
                    result.DecisionId = actionData.Descendants("DecisionId").First().Value;
                    result.Score      = int.Parse(actionData.Descendants("Score").First().Value);
                }
            }
            else
            {
                result.Decision   = "DECLINE";
                result.DecisionId = "";
                result.Score      = 0;
            }

            return(result);
        }
        public PopulateExamplesBehaviour(EverythingViewModel target, IModule module, ISchedulerContext schedulerContext) : base(target)
        {
            var categoryObs = Target.WhenPropertyChanged(x => x.SelectedCategory)
                              .Do(c =>
            {
                var allExamples = module.Examples;
                var newDict     = new Dictionary <Guid, Example>();
                foreach (var example in allExamples)
                {
                    if (c == null || example.Value.TopLevelCategory == c)
                    {
                        newDict.Add(example.Key, example.Value);
                    }
                }
                Target.Examples = newDict;
            });

            Observable.CombineLatest(Target.WhenPropertyChanged(x => x.SelectedGroupingMode), categoryObs, Tuple.Create)
            .Where(tpl => tpl.Item1 != null && tpl.Item2 != null)
            .ObserveOn(schedulerContext.Dispatcher)
            .Subscribe(tpl => Target.UpdateEverythingSource(tpl.Item1.GroupingPredicate))
            .DisposeWith(this);
        }
        /// <summary>
        /// Executes the actions in parallel.
        /// </summary>
        /// <param name="serviceProvider">Dependency injection container for resolving services.</param>
        /// <param name="context">Scheduler context for executing actions.</param>
        /// <returns>A single <c>Task</c> object that completes when all the action finish execution.</returns>
        public async Task Execute(IServiceProvider serviceProvider, ISchedulerContext context)
        {
            List <Task> actionTasks = new List <Task>();

            foreach (var action in _actions)
            {
                actionTasks.Add(action.Execute(serviceProvider, context));
            }

            await Task.WhenAll(actionTasks);

            if (_actions.Any(a => a.ActionError))
            {
                ActionError = true;
                StringBuilder sb = new StringBuilder();

                foreach (var errorMessage in _actions.Where(a => a.ActionError).Select(a => a.ErrorMessage))
                {
                    sb.AppendLine(errorMessage);
                }

                ErrorMessage = sb.ToString();
            }
        }
示例#27
0
        public static JobItem Create(ISchedulerContext ctx)
        {
            var definition = JobFactory.Interval("Foo1", () =>
            {
                return Task.Factory.StartNew(() => Console.WriteLine("Foo1"));
            }, TimeSpan.FromMinutes(10), "Some");

            return new InlineScheduler.Advanced.JobItemFactory(ctx).Create(definition);
        }
 public SimpleWorkflow(ISchedulerContext schedulerContext)
 {
     _schedulerContext = schedulerContext;
 }
 public JobManager(ISchedulerContext context)
 {
     _context = context;
 }
示例#30
0
 public void Handle(ISchedulerContext context)
 {
     Console.WriteLine("Tick " + context.Record.Id);
 }
示例#31
0
 void IScheduler.Schedule(ISchedulerContext context, TaskInfo task)
 {
     Schedule((TSchedulerContext)context, (TTaskInfo)task);
 }
示例#32
0
 Task IScheduler.Next(ISchedulerContext context)
 {
     return(Next((TSchedulerContext)context));
 }
 public JobItemFactory(ISchedulerContext context)
 {
     _context = context;
 }
 public JobItemFactory(ISchedulerContext context)
 {
     _context = context;
 }
 public JobManager(ISchedulerContext context)
 {
     _context = context;
 }
示例#36
0
 /// <summary>
 /// Called before the <see cref="Execute(REQUEST, ISchedulerContext)"/> method. Use this method to setup the scheduler context.
 /// </summary>
 /// <param name="request">Instance of the request object.</param>
 /// <param name="context">Scheduler execution context.</param>
 public abstract void OnMapRequest(REQUEST request, ISchedulerContext context);
示例#37
0
 /// <summary>
 /// Called after the <see cref="Execute(REQUEST, ISchedulerContext)"/> method. Use this method to generate the response object.
 /// </summary>
 /// <param name="context">Scheduler execution context.</param>
 /// <returns>Generated response object.</returns>
 public abstract RESPONSE OnMapResponse(ISchedulerContext context);