Fix: GroupReceiveSequence trigger

This commit is contained in:
MaMe82 2018-10-13 12:44:11 +02:00
parent cabf0e4e9d
commit a99836ac08
3 changed files with 30 additions and 12 deletions

View File

@ -591,7 +591,7 @@ func (srv *server) StartRpcServerAndWeb(host string, gRPCPort string, webPort st
//fmt.Printf("gRPC-web req:\n %v\n", req)
grpc_web_srv.ServeHTTP(resp, req) // if content type indicates grpc or REQUEST METHOD IS OPTIONS (pre-flight) serve gRPC-web
} else {
fmt.Printf("legacy web req:\n %v\n", req)
fmt.Printf("legacy web req: %v\n", req.RequestURI)
http.FileServer(http.Dir((absWebRoot))).ServeHTTP(resp, req)
}
}

View File

@ -163,7 +163,7 @@ func (tam *TriggerActionManager) processing_loop() {
//
func (tam *TriggerActionManager) processTriggerEvent(evt *pb.Event) {
//fmt.Printf("Remaining triggerActions: %+v\n", tam.registeredTriggerAction)
//fmt.Printf("Received event: %+v\n", evt)
//fmt.Printf("TriggerActionManager Received event: %+v\n", evt)
tam.registeredTriggerActionMutex.Lock()
defer tam.registeredTriggerActionMutex.Unlock()
@ -272,18 +272,20 @@ func (tam *TriggerActionManager) onGroupReceive(evt *pb.Event, ta *pb.TriggerAct
tam.executeAction(evt, ta, tt, at) // fire action
return nil
case triggerTypeGroupReceiveSequence:
//triggerValues := ta.Trigger.(*pb.TriggerAction_GroupReceiveSequence).GroupReceiveSequence.Values
// fmt.Println("### Processing GroupReceive event for trigger type GroupReceiveSequence")
triggerGroupName := ta.Trigger.(*pb.TriggerAction_GroupReceiveSequence).GroupReceiveSequence.GroupName
if evGroupName != triggerGroupName {
// retrieve the sequence checker
if sc,exists := tam.groupReceiveSequenceCheckers[ta]; exists {
if sc.Check(evValue) {
tam.executeAction(evt, ta, tt, at) // fire action
}
}
return nil // don't handle on group mismatch, but return without error
return nil
}
// retrieve the sequence checker
if sc,exists := tam.groupReceiveSequenceCheckers[ta]; exists {
if sc.Check(evValue) {
tam.executeAction(evt, ta, tt, at) // fire action
}
// fmt.Printf("GrpRcvSeq '%s' received '%d': %s\n", triggerGroupName, evValue, sc)
}
return nil // don't handle on group mismatch, but return without error
default:
@ -541,7 +543,7 @@ func (tam *TriggerActionManager) AddTriggerAction(ta *pb.TriggerAction) (taAdded
//if new ta trigger is GroupReceiveSequence, add a SequenceChecker
if triggerGrpRcv,match := ta.Trigger.(*pb.TriggerAction_GroupReceiveSequence); match {
tam.groupReceiveSequenceCheckersMutex.Lock()
fmt.Printf("##### New val checker %+v\n", triggerGrpRcv.GroupReceiveSequence.Values)
//fmt.Printf("##### New val checker %+v\n", triggerGrpRcv.GroupReceiveSequence.Values)
tam.groupReceiveSequenceCheckers[ta] = util.NewValueSequenceChecker(triggerGrpRcv.GroupReceiveSequence.Values, triggerGrpRcv.GroupReceiveSequence.IgnoreOutOfOrder)
tam.groupReceiveSequenceCheckersMutex.Unlock()
}

View File

@ -1,11 +1,27 @@
package util
import "fmt"
type ValueSequenceChecker struct {
values []int32
allowOutOfOrder bool
currentPos int
}
func (sc *ValueSequenceChecker) String() string {
res := "("
for i,v := range sc.values {
if i == sc.currentPos { res += "[" }
res += fmt.Sprintf("%d", v)
if i == sc.currentPos { res += "]" }
if i != len(sc.values)-1 { res += " "}
}
res += ")"
return res
}
func (sc *ValueSequenceChecker) Check(val int32) bool {
if len(sc.values) == 0 { return true }