From a2d7d13ed13cbe3b51ef36725a28bd2dd50fdc16 Mon Sep 17 00:00:00 2001 From: Sebastian Steuer Date: Sun, 24 Nov 2013 16:00:46 +0100 Subject: [PATCH] refactored OvenWatcher --- ovenWatcher.py | 34 ++++++++++++++++++++++++++++++++++ picoreflowd.py | 36 ++++-------------------------------- 2 files changed, 38 insertions(+), 32 deletions(-) create mode 100644 ovenWatcher.py diff --git a/ovenWatcher.py b/ovenWatcher.py new file mode 100644 index 0000000..6a68712 --- /dev/null +++ b/ovenWatcher.py @@ -0,0 +1,34 @@ +import threading,logging,json,time + +log = logging.getLogger(__name__) + +class OvenWatcher(threading.Thread): + def __init__(self,oven): + self.observers = [] + threading.Thread.__init__(self) + self.daemon = True + + self.oven = oven + self.start() + + def run(self): + while True: + oven_state = self.oven.get_state() + self.notifyAll(oven_state) + time.sleep(1) + + def addObserver(observer): + self.observers.append(observer) + + def notifyAll(self,message): + message_json = json.dumps(message) + log.debug("sending to %d clients: %s"%(len(self.observers),message_json)) + for wsock in self.observers: + if wsock: + try: + wsock.send(message_json) + except: + log.error("could not write to socket %s"%wsock) + wsocks.remove(wsock) + else: + wsocks.remove(wsock) diff --git a/picoreflowd.py b/picoreflowd.py index 7b46837..7afa42e 100644 --- a/picoreflowd.py +++ b/picoreflowd.py @@ -1,10 +1,11 @@ -import os,threading,time,logging,json +import os,logging,json import bottle from gevent.pywsgi import WSGIServer from geventwebsocket import WebSocketHandler, WebSocketError from oven import Oven +from ovenWatcher import OvenWatcher log_format = '%(asctime)s %(levelname)s %(name)s: %(message)s' logging.basicConfig(level = logging.DEBUG, format = log_format) @@ -12,37 +13,8 @@ log = logging.getLogger("picoreflowd") app = bottle.Bottle() oven = Oven() -wsocks_control = [] - -class OvenWatcher(threading.Thread): - def __init__(self,oven): - self.watchers = [] - threading.Thread.__init__(self) - self.daemon = True - - self.oven = oven - self.start() - - def run(self): - while True: - oven_state = self.oven.get_state() - self.notifyAll(oven_state) - time.sleep(1) - - def notifyAll(self,message): - message_json = json.dumps(message) - log.debug("sending to %d clients: %s"%(len(self.watchers),message_json)) - for wsock in self.watchers: - if wsock: - try: - wsock.send(message_json) - except: - log.error("could not write to socket %s"%wsock) - wsocks.remove(wsock) - else: - wsocks.remove(wsock) - ovenWatcher = OvenWatcher(oven) +wsocks_control = [] @app.route('/') def index(): @@ -109,7 +81,7 @@ def handle_websocket(): if not wsock: abort(400, 'Expected WebSocket request.') - ovenWatcher.watchers.append(wsock) + ovenWatcher.addObserver(wsock) while True: try: message = wsock.receive()