示例#1
0
        private void InvokeTrigger(WorkflowAgent agent, WorkflowTrigger trigger)
        {
            _log.InfoFormat("Received trigger invocation on hosted workflow {0}: {1}.{2}", agent.Id,
                            trigger.MachineContext, trigger.TriggerName ?? "none");

            // trigger is already in the trigger table.
            agent.Bump();
        }
示例#2
0
        public void End()
        {
            var fire = new WorkflowTrigger
            {
                Route          = TriggerRoutes.EndRoute,
                InstanceTarget = Id,
            };

            StoreWorkflowTrigger(fire);
        }
示例#3
0
        public void Nap(TimeSpan ts)
        {
            var fire = new WorkflowTrigger
            {
                Route          = TriggerRoutes.NapRoute,
                InstanceTarget = Id
            };

            StoreWorkflowTrigger(fire);
            BroadcastTrigger(fire);
        }
示例#4
0
 private void InternalDistributeTrigger(CancellationToken ct, WorkflowTrigger wft)
 {
     if (_agents.ContainsKey(wft.InstanceTarget))
     {
         DistributeWorkflowTriggers(wft, ct, null);
     }
     else
     {
         _broadcaster.Send(wft, "_");
     }
 }
示例#5
0
        private void FireTriggerJob(CancellationToken ct, FireWorkflowTriggerJob wftj)
        {
            var wft = new WorkflowTrigger
            {
                InstanceTarget = wftj.Instance,
                MachineContext = wftj.Context,
                TriggerName    = wftj.Trigger,
                TriggerId      = Guid.NewGuid().ToString()
            };

            InternalDistributeTrigger(ct, wft);
        }
示例#6
0
        public void Fire(string context, string trigger)
        {
            var fire = new WorkflowTrigger
            {
                TriggerName    = trigger,
                InstanceTarget = Id,
                MachineContext = context
            };

            StoreWorkflowTrigger(fire);

            BroadcastTrigger(fire);
        }
示例#7
0
        private void FireRetry(CancellationToken ct, WorkflowStateMachineRetry wfsmr)
        {
            var wft = new WorkflowTrigger
            {
                InstanceTarget = wfsmr.Id,
                TriggerId      = Guid.NewGuid().ToString(),
                TriggerName    = CommonTriggers.StateRetryTrigger,
                MachineContext = wfsmr.Machine,
                Route          = string.Empty,
            };

            InternalDistributeTrigger(ct, wft);
        }
示例#8
0
        public void EndWorkflow(string agentId)
        {
            _dblog.InfoFormat("PluginTemplate host end workflow on instance {0}: machine {1}: {2}.", agentId);


            var fire = new WorkflowTrigger
            {
                Id             = Guid.NewGuid().ToString(),
                Route          = TriggerRoutes.EndRoute,
                InstanceTarget = agentId,
            };

            InternalFireOnHostedWorkflow(agentId, fire);
        }
示例#9
0
        /// <summary>
        ///   PluginTemplate wants to fire a trigger.
        /// </summary>
        /// <param name="agentId"> </param>
        /// <param name="machine"> </param>
        /// <param name="trigger"> </param>
        /// <param name="msg"> </param>
        public void FireOnHostedWorkflow(string agentId, string machine, string trigger)
        {
            _dblog.InfoFormat("PluginTemplate host firing on instance {0}: machine {1}: {2}.", agentId, machine, trigger);


            var fire = new WorkflowTrigger
            {
                TriggerName    = trigger,
                InstanceTarget = agentId,
                MachineContext = machine,
                Route          = TriggerRoutes.FireRoute,
                Id             = Guid.NewGuid().ToString()
            };

            InternalFireOnHostedWorkflow(agentId, fire);
        }
示例#10
0
        private void InternalFireOnHostedWorkflow(string agentId, WorkflowTrigger fire)
        {
            _triggers.Store(fire);



            if (_agents.ContainsKey(agentId))
            {
                _agents[agentId].Bump();
            }
            else
            {
                _log.WarnFormat(
                    "Attempt to fire on hosted workflow {0} that isn't hosted here, redirecting to broadcast.", agentId);

                _broadcaster.Send(fire, "_");
            }
        }
示例#11
0
 private void BroadcastTrigger(WorkflowTrigger trigger)
 {
     _sender.Send(trigger, string.Empty);
 }
示例#12
0
 public void StoreWorkflowTrigger(WorkflowTrigger wft)
 {
     _triggers.CreateNew(wft);
 }