Poll for network info via a thread
This commit is contained in:
@@ -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():
|
||||
|
||||
Reference in New Issue
Block a user