The "no B:x for 2 minutes" will not fire if nothing comes in even after 2minutes. e.g. if no characters get killed then no events will come in. If I add a timer to this rule, say like timer (2m 1s), then the rule will fire every second after 2 minutes.
Best Regards, Kevin 2010/10/29 Wolfgang Laun <wolfgang.l...@gmail.com> > OK; your original version somehow put me off the right track. > This rule will fire as soon as there is no B:n according to the > Player index for 2 minutes. > > rule "no B:x for 2 minutes" > when > $b : Player( $index: index ) > not ( EventB( index == $index) over window:time( 2m ) ) > then > System.out.println( "no B:" + $index + " in last 2 minutes" ); > end > > This would fire whenever there's no B at all for 2 minutes: > > rule "no B for 2 minutes" > when > not ( EventB() over window:time( 2m ) ) > then > System.out.println( "no B:" + $index + " in last 2 minutes" ); > end > > > > 2010/10/28 赵侃侃 <kevin...@gmail.com> > >> My last mail should actually read: >> >> A player may have multiple characters and the rule should fire when *ALL*of >> its characters live longer than 2 minutes. that's why "characters" do >> not have a unique identification and there isn't any event representing a >> character birth. >> >> Best Regards, >> Kevin Zhao >> >> 在 2010年10月28日 下午9:50,赵侃侃 <kevin...@gmail.com>写道: >> >> A player may have multiple characters and the rule should fire when any of >>> its characters live longer than 2 minutes. that's why "characters" do not >>> have a unique identification and there isn't any event representing a >>> character birth. >>> >>> Best Regards, >>> Kevin Zhao >>> >>> 2010/10/28 Wolfgang Laun <wolfgang.l...@gmail.com> >>> >>>> If EventB( index == 3 ) signifies that the "character" owned by player 3 >>>> has been killed: what is the event that this character has been born? Life >>>> is the time between birth and death; these two are well-defined (well, >>>> mostly) events, and they ought to be represented by clean-cut events in any >>>> application. Then it's no problem to write rules firing when a "character" >>>> lives longer or shorter than any time. Also, "characters" may have to have >>>> a >>>> unique identification beyond their player-owner. >>>> >>>> If you are constantly shifting your specs, we won't be getting any >>>> closer to a solution, though. >>>> >>>> >>>> -W >>>> >>>> >>>> 2010/10/28 赵侃侃 <kevin...@gmail.com> >>>> >>>>> To be honest, I don't quite understand the rules you wrote. Let me >>>>> explain this a little bit with a real world scenario. >>>>> Assume this is an on-line game that EventB indicates a 'kill' event >>>>> that a player is losing its character who might be killed by some other >>>>> player. >>>>> The property index points to the player who owns this character. What >>>>> I'm looking for here is to find out when a player's character survives in >>>>> 2 >>>>> minutes. The number of players in a game is at least 2 but can be up to >>>>> any >>>>> number. >>>>> >>>>> Best Regards, >>>>> Kevin Zhao >>>>> >>>>> 2010/10/28 Wolfgang Laun <wolfgang.l...@gmail.com> >>>>> >>>>>> >>>>>> >>>>>> 2010/10/28 赵侃侃 <kevin...@gmail.com> >>>>>> >>>>>>> Hello Wolfgang, >>>>>>> >>>>>>> Index is just like the index in an array. the value can be any from 0 >>>>>>> to the array length. >>>>>>> for the previous example, the length is 1 so index can be either 0 or >>>>>>> 1. but in the real case, the length can be an arbitrary number. >>>>>>> >>>>>>> another question, there are 2 rules here, do both of them have to be >>>>>>> applied? >>>>>>> >>>>>> >>>>>> One creates and inserts the PatternConsumer which blocks repeated >>>>>> usage of the pair of EventB facts that have been successfully paired. >>>>>> Otherwise a sequence EventB:0, EventB:1, EventB:2 would fire 2 times. >>>>>> >>>>>> If the positive condition is more complex, e.g., you need *all* index >>>>>> values 0,...,L-1 within 2m, then other conditions will be required (and >>>>>> that's what I meant with "more precisesly"). If any pair a,b from >>>>>> [0..L-1] >>>>>> will do, then the modified version (!=) should be OK. >>>>>> >>>>>> -W >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> Best Regards, >>>>>>> Kevin Zhao >>>>>>> >>>>>>> 2010/10/28 Wolfgang Laun <wolfgang.l...@gmail.com> >>>>>>> >>>>>>> Kindly state your requirements precisely. >>>>>>>> >>>>>>>> Perhaps >>>>>>>> not ( EventB ( index != $index,... ) >>>>>>>> is what you need. >>>>>>>> -W >>>>>>>> >>>>>>>> 2010/10/28 赵侃侃 <kevin...@gmail.com> >>>>>>>> >>>>>>>> I haven't tested this rule, but what about the case that property >>>>>>>>> index would have arbitrary number of possible values? >>>>>>>>> >>>>>>>>> 2010/10/27 Wolfgang Laun <wolfgang.l...@gmail.com> >>>>>>>>> >>>>>>>>>> Omitting the Entry Points: >>>>>>>>>> >>>>>>>>>> rule "B-0-1-not OK" >>>>>>>>>> when >>>>>>>>>> $b : EventB( $index: index ) >>>>>>>>>> not ( PatternConsumer( id == "B01", events contains $b ) ) >>>>>>>>>> not ( EventB( index == (1 - $index), this after[0s,2m] $b ) ) >>>>>>>>>> then >>>>>>>>>> System.out.println( "B:" + $index + ", but no B:" + (1-$index) >>>>>>>>>> ); >>>>>>>>>> end >>>>>>>>>> >>>>>>>>>> rule "B-0-1" >>>>>>>>>> when >>>>>>>>>> $b1 : EventB( $index: index ) >>>>>>>>>> $b2 : EventB( index == (1 - $index), this after[0s,2m] $b1 ) >>>>>>>>>> then >>>>>>>>>> insert( new PatternConsumer( "B01", $b1, $b2 ) ); >>>>>>>>>> System.out.println( "B:" + $index + "+B:" + (1-$index) ); >>>>>>>>>> end >>>>>>>>>> >>>>>>>>>> -W >>>>>>>>>> >>>>>>>>>> 2010/10/27 赵侃侃 <kevin...@gmail.com>: >>>>>>>>>> > Hello, >>>>>>>>>> > With the help from the community I managed to get my first rule >>>>>>>>>> working, and >>>>>>>>>> > I'm trying to write my second rule on my own but it just doesn't >>>>>>>>>> seem to >>>>>>>>>> > work correctly. >>>>>>>>>> > Here is the scenario, what I want is to identify a pattern that >>>>>>>>>> there's no >>>>>>>>>> > EventB coming in within 2 minutes with a particular index value. >>>>>>>>>> > For example, EventB would have a property named index and assume >>>>>>>>>> the value >>>>>>>>>> > of index would be either 0 or 1. >>>>>>>>>> > Before firing the rules, I would manually insert facts of >>>>>>>>>> possibleIndex with >>>>>>>>>> > value 0 and 1 into the workingMemory. >>>>>>>>>> > Within 2 minutes, if there only comes one EventB with index >>>>>>>>>> valued 0 then >>>>>>>>>> > the system should report no EventB coming in with index value 1 >>>>>>>>>> in last 2 >>>>>>>>>> > minutes. >>>>>>>>>> > Vice versa, in the case of only coming one EventB with index >>>>>>>>>> valued 1 then >>>>>>>>>> > the system should report no EventB coming in with index value 0 >>>>>>>>>> in last 2 >>>>>>>>>> > minutes. >>>>>>>>>> > If within 2 minutes, there comes 2 EventB with both value 0 and >>>>>>>>>> 1 then >>>>>>>>>> > nothing should report. >>>>>>>>>> > Here is what I wrote, but it doesn't seem to work correctly. >>>>>>>>>> > I used a timer to fire this rule every 10 seconds because I >>>>>>>>>> don't think the >>>>>>>>>> > rule would run automatically if I don't add that. (not too sure >>>>>>>>>> though) >>>>>>>>>> > rule "no B in 2 minutes" >>>>>>>>>> > timer (0 10s) >>>>>>>>>> > when >>>>>>>>>> > possibleIndex( $index : index ) from entry-point "Event stream" >>>>>>>>>> > $p : PatternConsumer ( name == 'no B' && index == $index ) >>>>>>>>>> > not ( EventB( index == $index && this after[0ms,2m] $p) over >>>>>>>>>> window:time(2m) >>>>>>>>>> > from entry-point "Event stream" ) >>>>>>>>>> > then >>>>>>>>>> > PatternConsumer pc = new PatternConsumer( "no B", $index ); >>>>>>>>>> > insert(pc); >>>>>>>>>> > System.out.println("no B in 2 minutes " + $index); >>>>>>>>>> > end >>>>>>>>>> > Best Regards, >>>>>>>>>> > Kevin Zhao >>>>>>>>>> > _______________________________________________ >>>>>>>>>> > rules-users mailing list >>>>>>>>>> > rules-users@lists.jboss.org >>>>>>>>>> > https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> >>>>>>>>>> _______________________________________________ >>>>>>>>>> rules-users mailing list >>>>>>>>>> rules-users@lists.jboss.org >>>>>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> rules-users mailing list >>>>>>>>> rules-users@lists.jboss.org >>>>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> rules-users mailing list >>>>>>>> rules-users@lists.jboss.org >>>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> rules-users mailing list >>>>>>> rules-users@lists.jboss.org >>>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>>> >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> rules-users mailing list >>>>>> rules-users@lists.jboss.org >>>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>>> >>>>>> >>>>> >>>>> _______________________________________________ >>>>> rules-users mailing list >>>>> rules-users@lists.jboss.org >>>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>>> >>>>> >>>> >>>> _______________________________________________ >>>> rules-users mailing list >>>> rules-users@lists.jboss.org >>>> https://lists.jboss.org/mailman/listinfo/rules-users >>>> >>>> >>> >> >> _______________________________________________ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users