def init(): threading.enumerate()[1].setName("MainFork") pprint(Fore.CYAN + 'Boot NMEA Multiplexer', " SYSTEM ", "INFO") if os.path.isfile( os.path.join(app.root_path, "lib", "settings", "_current.json")): settings.load() for s in settings.talkers: talker = Talker(tuple(s['bind_address']), s['iface'], s['name'], s['throttle'], [], pusher, False, settings.client_treshold) talkers.append(talker) talker.start() for l in settings.listeners: ss = [] for s in talkers: if s.id in l['talker_ids']: ss.append(s) color = '#ffffff' if not 'color' in l.keys() else l['color'] accumulate = False if not 'accumulate_sentences' in l.keys( ) else l['accumulate_sentences'] resilient = False if not 'resilient' in l.keys( ) else l['resilient'] timeout = 10 if not 'timeout' in l.keys() else int(l['timeout']) listener = Listener(l['listen_address'], l['id'], l['name'], ss, l['msg_setup'], l['throttle'], color, accumulate, resilient, timeout, settings.period) listeners.append(listener) listener.start() if not 'go_on' in l.keys() or l['go_on'] == False: listener.pause() update() for s in talkers: if talker.throttle: talker.run_throttle()
def test_get_data(self): def get_data_now(listener): for i in range(3): data = listener.get_data() if len(data) > 0: return data else: sleep(.1) L = Listener(self.host, self.port) self.assertTrue(L.start()) sleep(1) for id_ in range(5): for balance in [None, 1, 2, 3]: s = Sender(id_, self.host, self.port) text = s.send(balance=balance) listened = get_data_now(L)[0] if balance: self.assertEqual( text, "{id}%%{data}%%{balance}".format(id=listened.id, data=listened.data, balance=balance)) else: self.assertEqual( text, "{id}%%{data}".format(id=listened.id, data=listened.data)) self.assertIsInstance(listened.timestamp, datetime.datetime) sleep(.1) self.assertTrue(L.is_active()) self.assertTrue(L.stop())
def __init__(self, host, port, db_file='db.sqlite', db_autoclean_days=60): self.datetime_format = "%Y-%m-%d %H:%M:%S.%f" # it's not familiar for Russia, but sorting would work correctly self._db_file = db_file self._db_init() self.db_autoclean_days = db_autoclean_days self.L = Listener(host, int(port)) self._t = None self._sync_loop_enabled = True
def add_listener(): g.error = '' g.talkers = talkers if request.method == 'POST': if not re.match(r"^\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?$", request.form['ip']): g.error = '<script>M.toast({html:"Invalid IP address",classes:"red darken-4"})</script>' return render_template("add_listener.html") if not re.match(r"^\d+$", request.form['port']) or int( request.form['port']) > 65535 or int( request.form['port']) <= 0: g.error = '<script>M.toast({html:"Invalid port number",classes:"red darken-4"})</script>' return render_template("add_listener.html") try: #print(request.form) ss = talkers if ('publish' in request.form.keys()) else [] listener = Listener( (request.form['ip'], int(request.form['port'])), "", request.form['name']) listener.color = request.form['color'] listener.start() listeners.append(listener) listener.talkers = [] for k in request.form: if re.match(r"^talker_", k): for s in talkers: if s.id == re.sub(r"^talker_", "", k): listener.talkers.append(s) listener.update() update() return redirect("/", code=303) except Exception as err: g.error = '<script>M.toast({html:"' + str( err) + '",classes:"red darken-4"})</script>' g.colors = colors return render_template("add_listener.html")
def test_start_stop(self): L = Listener(self.host, self.port) self.assertTrue(L.start()) self.assertTrue(L.is_active()) self.assertTrue(L.stop())