public void when_handling_fails_it_gets_sent_to_err_queue()
        {
            var msg = new ThrowEvent();

            _sut.Handle(msg, "");
            _err.Received(1).MessageHandlingFailed(msg, Arg.Any <HandledMessageException>());
        }
        public override void Execute(IExecutionEntity execution)
        {
            ThrowEvent throwEvent = (ThrowEvent)execution.CurrentFlowElement;

            /*
             * From the BPMN 2.0 spec:
             *
             * The Activity to be compensated MAY be supplied.
             *
             * If an Activity is not supplied, then the compensation is broadcast to all completed Activities in
             * the current Sub- Process (if present), or the entire Process instance (if at the global level). This "throws" the compensation.
             */
            string activityRef = compensateEventDefinition.ActivityRef;

            ICommandContext commandContext = Context.CommandContext;
            IEventSubscriptionEntityManager eventSubscriptionEntityManager = commandContext.EventSubscriptionEntityManager;

            IList <ICompensateEventSubscriptionEntity> eventSubscriptions = new List <ICompensateEventSubscriptionEntity>();

            if (!string.IsNullOrWhiteSpace(activityRef))
            {
                // If an activity ref is provided, only that activity is compensated
                ((List <ICompensateEventSubscriptionEntity>)eventSubscriptions).AddRange(eventSubscriptionEntityManager.FindCompensateEventSubscriptionsByProcessInstanceIdAndActivityId(execution.ProcessInstanceId, activityRef));
            }
            else
            {
                // If no activity ref is provided, it is broadcast to the current sub process / process instance
                Process process = ProcessDefinitionUtil.GetProcess(execution.ProcessDefinitionId);

                IFlowElementsContainer flowElementsContainer;
                if (throwEvent.SubProcess == null)
                {
                    flowElementsContainer = process;
                }
                else
                {
                    flowElementsContainer = throwEvent.SubProcess;
                }

                foreach (FlowElement flowElement in flowElementsContainer.FlowElements)
                {
                    if (flowElement is Activity)
                    {
                        ((List <ICompensateEventSubscriptionEntity>)eventSubscriptions).AddRange(eventSubscriptionEntityManager.FindCompensateEventSubscriptionsByProcessInstanceIdAndActivityId(execution.ProcessInstanceId, flowElement.Id));
                    }
                }
            }

            if (eventSubscriptions.Count == 0)
            {
                Leave(execution);
            }
            else
            {
                // TODO: implement async (waitForCompletion=false in bpmn)
                ScopeUtil.ThrowCompensationEvent(eventSubscriptions, execution, false);
                Leave(execution);
            }
        }
        protected internal override BaseElement ConvertXMLToElement(XMLStreamReader xtr, BpmnModel model)
        {
            ThrowEvent throwEvent = new ThrowEvent();

            BpmnXMLUtil.AddXMLLocation(throwEvent, xtr);
            ParseChildElements(XMLElementName, throwEvent, model, xtr);
            return(throwEvent);
        }
Example #4
0
        public override BaseElement Clone()
        {
            ThrowEvent clone = new ThrowEvent
            {
                Values = this
            };

            return(clone);
        }
Example #5
0
        public void Update_YieldsThrow()
        {
            var player = new Player();

            var frame1 = new Frame {
                Match = { GameClock = 300f }
            };
            var possessionChangeEvent1 = new PossessionChangeEvent(frame1, null, null);

            var frame2 = new Frame {
                Match = { GameClock = 300f }
            };
            var possessionChangeEvent2 = new PossessionChangeEvent(frame1, player, HandSide.Right);

            var frame3 = new Frame {
                Match = { GameClock = 300f }
            };

            var frame4 = new Frame {
                Match = { GameClock = 300f - ThrowPlaySensor.SLAP_THRESHOLD_TIME - 1 }
            };
            var throwEvent = new ThrowEvent(frame4, player);

            var sensor = new ThrowPlaySensor();

            sensor.Initialize(new IStateSensor[0]);

            //
            var result1 = sensor.Update(frame1, new[] { possessionChangeEvent1 });
            var result2 = sensor.Update(frame2, new[] { possessionChangeEvent2 });
            var result3 = sensor.Update(frame3, new GameEvent[0]);
            var result4 = sensor.Update(frame4, new[] { throwEvent });

            //

            Assert.IsNull(result1);
            Assert.IsNull(result2);
            Assert.IsNull(result3);

            var slap = result4 as ThrowPlay;

            Assert.IsNotNull(slap);
            Assert.AreEqual(player, slap.Player);
        }
Example #6
0
        public void Update_YieldsThrowIfPossessionMissed()
        {
            var player = new Player();

            var frame = new Frame {
                Match = { GameClock = 300f - ThrowPlaySensor.SLAP_THRESHOLD_TIME - 1 }
            };
            var throwEvent = new ThrowEvent(frame, player);

            var sensor = new ThrowPlaySensor();

            sensor.Initialize(new IStateSensor[0]);

            //
            var result = sensor.Update(frame, new[] { throwEvent });
            //
            var slap = result as ThrowPlay;

            Assert.IsNotNull(slap);
            Assert.AreEqual(player, slap.Player);
        }
Example #7
0
        public void Update_YieldsThrowIfPlayerMismatch()
        {
            var player1 = new Player {
                Id = 1
            };
            var player2 = new Player {
                Id = 2
            };

            var frame1 = new Frame {
                Match = { GameClock = 300f }
            };
            var possessionChangeEvent1 = new PossessionChangeEvent(frame1, player1, HandSide.Right);

            var frame2 = new Frame {
                Match = { GameClock = 300f - ThrowPlaySensor.SLAP_THRESHOLD_TIME }
            };
            var throwEvent = new ThrowEvent(frame2, player2);

            var sensor = new ThrowPlaySensor();

            sensor.Initialize(new IStateSensor[0]);

            //
            var result1 = sensor.Update(frame1, new[] { possessionChangeEvent1 });
            var result2 = sensor.Update(frame2, new[] { throwEvent });

            //

            Assert.IsNull(result1);

            var slap = result2 as ThrowPlay;

            Assert.IsNotNull(slap);
            Assert.AreEqual(player2, slap.Player);
        }
Example #8
0
 public virtual void Visit(ThrowEvent ev)
 {
 }
Example #9
0
        /// <summary>
        /// Called from <c>ThrownWeapon.DoThrow(BaseEntity.RPCMessage)</c> .
        /// </summary>
        public static void On_PlayerThrowExplosive(ThrownWeapon thrownWeapon, BaseEntity.RPCMessage msg)
        {
            ThrowEvent evt = new ThrowEvent(thrownWeapon, msg);

            switch (evt.ProjectileName)
            {
                case "F1 Grenade":
                case "Beancan Grenade":
                    OnNext("On_PlayerThrowGrenade", evt);
                    break;

                case "Timed Explosive Charge":
                case "Survey Charge":
                case "Satchel Charge":
                    OnNext("On_PlayerThrowCharge", evt);
                    break;

                case "Supply Signal":
                    OnNext("On_PlayerThrowSignal", evt);
                    break;
            }
        }
        protected internal override void WriteAdditionalChildElements(BaseElement element, BpmnModel model, XMLStreamWriter xtw)
        {
            ThrowEvent throwEvent = (ThrowEvent)element;

            WriteEventDefinitions(throwEvent, throwEvent.EventDefinitions, model, xtw);
        }
 public void Handle(ThrowEvent ev)
 {
     throw new Exception();
 }
 public virtual IntermediateThrowCompensationEventActivityBehavior CreateIntermediateThrowCompensationEventActivityBehavior(ThrowEvent throwEvent, CompensateEventDefinition compensateEventDefinition)
 {
     return(new IntermediateThrowCompensationEventActivityBehavior(compensateEventDefinition));
 }
 public virtual IntermediateThrowSignalEventActivityBehavior CreateIntermediateThrowSignalEventActivityBehavior(ThrowEvent throwEvent, SignalEventDefinition signalEventDefinition, Signal signal)
 {
     return(new IntermediateThrowSignalEventActivityBehavior(signalEventDefinition, signal));
 }
 public virtual IntermediateThrowMessageEventActivityBehavior CreateIntermediateThrowMessgeEventActivityBehavior(ThrowEvent throwEvent, MessageEventDefinition messageEventDefinition, Message message)
 {
     return(new IntermediateThrowMessageEventActivityBehavior(messageEventDefinition, message));
 }
 public virtual IntermediateThrowNoneEventActivityBehavior CreateIntermediateThrowNoneEventActivityBehavior(ThrowEvent throwEvent)
 {
     return(new IntermediateThrowNoneEventActivityBehavior());
 }
 public void when_handling_fails_it_gets_sent_to_err_queue()
 {
     var msg = new ThrowEvent();
     _sut.Handle(msg,"");
     _err.Received(1).MessageHandlingFailed(msg,Arg.Any<HandledMessageException>());
 }
 public void Handle(ThrowEvent ev)
 {
     throw new Exception();
 }