Initial last synchronous filters
This commit is contained in:
parent
f3fdfd4bbc
commit
7a8aeb4a0d
|
@ -139,3 +139,49 @@ func (convert *Convert[InMsgType]) ConvertTo(out SyncFilter[GenericMessage]) {
|
|||
func (convert *Convert[InMsgType]) Then(_ SyncFilter[InMsgType]) {
|
||||
panic("Use ConvertTo() with Convert object instead of Then().")
|
||||
}
|
||||
|
||||
type FilterByLastSeenSync struct {
|
||||
SyncFilterImpl[satel.Event]
|
||||
dataStore *DataStore
|
||||
}
|
||||
|
||||
func (filter *FilterByLastSeenSync) Call(ev satel.Event) {
|
||||
retEv := satel.Event{BasicEvents: make([]satel.BasicEventElement, 0)}
|
||||
for _, basicEventElement := range ev.BasicEvents {
|
||||
lastSeen := filter.dataStore.GetSystemState()
|
||||
val, ok := lastSeen[EventKey{basicEventElement.Type, basicEventElement.Index}]
|
||||
if !ok || val.Value != basicEventElement.Value {
|
||||
retEv.BasicEvents = append(retEv.BasicEvents, basicEventElement)
|
||||
// TODO: flush to disk only after the loop finishes
|
||||
filter.dataStore.SetSystemState(EventKey{basicEventElement.Type, basicEventElement.Index},
|
||||
EventValue{basicEventElement.Value})
|
||||
}
|
||||
}
|
||||
if len(retEv.BasicEvents) != 0 {
|
||||
filter.CallNext(retEv)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
type FilterByTypeOrIndexSync struct {
|
||||
SyncFilterImpl[satel.Event]
|
||||
allowedTypes []SatelChangeType
|
||||
allowedIndexes []int
|
||||
}
|
||||
|
||||
func (filter *FilterByTypeOrIndexSync) Call(ev satel.Event) {
|
||||
if (len(filter.allowedTypes) == 0) && (len(filter.allowedIndexes) == 0) {
|
||||
// no allowed types == all types are allowed
|
||||
filter.CallNext(ev)
|
||||
} else {
|
||||
retEv := satel.Event{BasicEvents: make([]satel.BasicEventElement, 0)}
|
||||
for _, basicEventElement := range ev.BasicEvents {
|
||||
if isBasicEventElementOkay(basicEventElement, filter.allowedTypes, filter.allowedIndexes) {
|
||||
retEv.BasicEvents = append(retEv.BasicEvents, basicEventElement)
|
||||
}
|
||||
}
|
||||
if len(retEv.BasicEvents) != 0 {
|
||||
filter.CallNext(retEv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue