예제 #1
0
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()
예제 #2
0
    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())
예제 #3
0
 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
예제 #4
0
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")
예제 #5
0
 def test_start_stop(self):
     L = Listener(self.host, self.port)
     self.assertTrue(L.start())
     self.assertTrue(L.is_active())
     self.assertTrue(L.stop())