Example #1
0
        protected void PumpMessages(ProcessSession ps)
        {
            var queue = ps.SyncQueue;

            while (queue.Count > 0)
            {
                var m = queue.Dequeue();
                if (m is TaskExecEvent)
                {
                    var te = m as TaskExecEvent;
                    if (te.FromTaskInstanceId == te.FromProcessInstanceId || InstanceId.IsSameProcessInstance(te.ParentTaskInstanceId, te.FromProcessInstanceId))
                    {
                        DeliverTaskExecEvent(te);
                    }
                    else
                    {
                        MessageBus.Notify(te);
                    }
                }
                else if (m is TaskControlCommand)
                {
                    var tc = m as TaskControlCommand;
                    if (InstanceId.IsSameProcessInstance(tc.FromProcessInstanceId, tc.ToTaskInstanceId))
                    {
                        DeliverTaskControlMessage(tc);
                    }
                    else
                    {
                        MessageBus.Notify(tc);
                    }
                }
                else
                {
                    throw new Exception("Unexpected message in queue");
                }
            }
        }