Poll for network info via a thread

This commit is contained in:
David Carley
2022-08-18 22:11:34 +00:00
parent 5bb0afc8b5
commit 2d015dddc2

View File

@@ -4,9 +4,10 @@ import json
import uuid
import os
import socket
import bbctrl
import iw_parse
from tornado import gen
import threading
import subprocess
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
@@ -20,6 +21,7 @@ def call_get_output(cmd):
class UploadChangeHandler(FileSystemEventHandler):
def __init__(self, state):
self.state = state
@@ -28,7 +30,9 @@ class UploadChangeHandler(FileSystemEventHandler):
class State(object):
def __init__(self, ctrl):
self.lock = threading.Lock()
self.ctrl = ctrl
self.log = ctrl.log.get('State')
@@ -72,14 +76,15 @@ class State(object):
self.load_files()
observer = Observer()
observer.schedule(UploadChangeHandler(
self), self.ctrl.get_upload(), recursive=True)
observer.schedule(UploadChangeHandler(self),
self.ctrl.get_upload(),
recursive=True)
observer.start()
self._updateNetworkInfo()
threading.Thread(target=self._updateNetworkInfo, daemon=True).start()
@gen.coroutine
def _updateNetworkInfo(self):
while True:
try:
ipAddresses = call_get_output(['hostname', '-I']).split()
except:
@@ -104,7 +109,7 @@ class State(object):
'wifi': wifi
})
self.timeout = self.ctrl.ioloop.call_later(5, self._updateNetworkInfo)
time.sleep(5)
def reset(self):
# Unhome all motors
@@ -217,6 +222,8 @@ class State(object):
self.callbacks[self.resolve(name)] = cb
def set(self, name, value):
self.lock.acquire()
try:
name = self.resolve(name)
if not name in self.vars or self.vars[name] != value:
@@ -225,7 +232,10 @@ class State(object):
# Trigger listener notify
if self.timeout is None:
self.timeout = self.ctrl.ioloop.call_later(0.25, self._notify)
self.timeout = self.ctrl.ioloop.call_later(
0.25, self._notify)
finally:
self.lock.release()
def update(self, update):
for name, value in update.items():