mirror of
https://github.com/BOSWatch/BW3-Core.git
synced 2026-03-26 14:44:40 +01:00
rework double filter
This commit is contained in:
parent
c89e6ef28c
commit
4f72691c65
|
|
@ -27,33 +27,56 @@ logging.debug("- %s loaded", __name__)
|
||||||
class DoubleFilter:
|
class DoubleFilter:
|
||||||
"""!Double Filter Class"""
|
"""!Double Filter Class"""
|
||||||
|
|
||||||
def __init__(self, scanWord):
|
def __init__(self):
|
||||||
"""!init"""
|
"""!init"""
|
||||||
self._config = Config()
|
self._config = Config()
|
||||||
self._filterList = []
|
self._filterLists = {}
|
||||||
self._scanWord = scanWord
|
|
||||||
|
|
||||||
def check(self, bwPacket):
|
def filter(self, bwPacket):
|
||||||
|
|
||||||
self._deleteTooOld()
|
if bwPacket.get("mode") is "fms":
|
||||||
|
scanWord = "fms"
|
||||||
|
elif bwPacket.get("mode") is "pocsag":
|
||||||
|
scanWord = "ric"
|
||||||
|
elif bwPacket.get("mode") is "zvei":
|
||||||
|
scanWord = "zvei"
|
||||||
|
else:
|
||||||
|
logging.error("No Filter for '%s'", bwPacket)
|
||||||
|
return False
|
||||||
|
|
||||||
for listPacket in self._filterList:
|
if not bwPacket.get("mode") in self._filterLists:
|
||||||
if listPacket.get(self._scanWord) is bwPacket.get(self._scanWord):
|
logging.debug("create new doubleFilter list for '%s'", bwPacket.get("mode"))
|
||||||
self._filterList.remove(listPacket)
|
self._filterLists[bwPacket.get("mode")] = []
|
||||||
logging.debug("found duplicate: %s", bwPacket.get(self._scanWord))
|
|
||||||
|
|
||||||
self._filterList.insert(0, bwPacket)
|
# for debug
|
||||||
self._deleteTooMuch()
|
print(len(self._filterLists[bwPacket.get("mode")]))
|
||||||
|
|
||||||
def _deleteTooOld(self):
|
logging.debug("scanWord for '%s' is '%s'", bwPacket.get("mode"), scanWord)
|
||||||
|
|
||||||
|
return self.check(bwPacket, scanWord)
|
||||||
|
|
||||||
|
def check(self, bwPacket, scanWord):
|
||||||
|
self._filterLists[bwPacket.get("mode")].insert(0, bwPacket)
|
||||||
|
|
||||||
|
# delete entrys that are to old
|
||||||
counter = 0
|
counter = 0
|
||||||
for listPacket in self._filterList:
|
for listPacket in self._filterLists[bwPacket.get("mode")][1:]: # [1:] skip first entry, thats the new one
|
||||||
|
print(str(listPacket.get("timestamp")), str(time.time() - self._config.getInt("doubleFilter", "IgnoreTime", "serverConfig")))
|
||||||
if listPacket.get("timestamp") < (time.time() - self._config.getInt("doubleFilter", "IgnoreTime", "serverConfig")):
|
if listPacket.get("timestamp") < (time.time() - self._config.getInt("doubleFilter", "IgnoreTime", "serverConfig")):
|
||||||
self._filterList.remove(listPacket)
|
self._filterLists[bwPacket.get("mode")].remove(listPacket)
|
||||||
counter += 1
|
counter += 1
|
||||||
if counter:
|
if counter:
|
||||||
logging.debug("%d old entry removed", counter)
|
logging.debug("%d old entry(s) removed", counter)
|
||||||
|
|
||||||
def _deleteTooMuch(self):
|
# delete last entry if list is to big
|
||||||
if len(self._filterList) > self._config.getInt("doubleFilter", "MaxEntry", "serverConfig"):
|
if len(self._filterLists[bwPacket.get("mode")]) > self._config.getInt("doubleFilter", "MaxEntry", "serverConfig"):
|
||||||
self._filterList.pop()
|
logging.debug("MaxEntry reached - delete oldest")
|
||||||
|
self._filterLists[bwPacket.get("mode")].pop()
|
||||||
|
|
||||||
|
for listPacket in self._filterLists[bwPacket.get("mode")][1:]: # [1:] skip first entry, thats the new one
|
||||||
|
if listPacket.get(scanWord) is bwPacket.get(scanWord):
|
||||||
|
logging.debug("found duplicate: %s", bwPacket.get(scanWord))
|
||||||
|
return False
|
||||||
|
|
||||||
|
print("OK!")
|
||||||
|
return True
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ class Packet:
|
||||||
else:
|
else:
|
||||||
logging.debug("create bwPacket from string")
|
logging.debug("create bwPacket from string")
|
||||||
try:
|
try:
|
||||||
self._packet = eval(bwPacket.strip())
|
self._packet = eval(str(bwPacket.strip()))
|
||||||
except:
|
except:
|
||||||
# todo can we repair the packet anyway?
|
# todo can we repair the packet anyway?
|
||||||
logging.exception("error while create packet from string")
|
logging.exception("error while create packet from string")
|
||||||
|
|
@ -49,7 +49,7 @@ class Packet:
|
||||||
|
|
||||||
@param fieldName: Name of the data to set
|
@param fieldName: Name of the data to set
|
||||||
@param value: Value to set"""
|
@param value: Value to set"""
|
||||||
self._packet[fieldName] = str(value)
|
self._packet[fieldName] = value
|
||||||
|
|
||||||
def get(self, fieldName):
|
def get(self, fieldName):
|
||||||
"""!Returns the value from a single field.
|
"""!Returns the value from a single field.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue