diff options
| -rw-r--r-- | ShowRunner.py | 16 | ||||
| -rwxr-xr-x | bridge.py | 7 | ||||
| -rw-r--r-- | fish_show.py | 13 | ||||
| -rw-r--r-- | show.py | 15 | ||||
| -rw-r--r-- | webapp/app/__init__.py | 5 | ||||
| -rw-r--r-- | webapp/app/templates/index.html | 2 | ||||
| -rw-r--r-- | webapp/app/views.py | 23 | ||||
| -rwxr-xr-x | webapp/run.py | 10 |
8 files changed, 70 insertions, 21 deletions
diff --git a/ShowRunner.py b/ShowRunner.py new file mode 100644 index 0000000..5a43a99 --- /dev/null +++ b/ShowRunner.py @@ -0,0 +1,16 @@ +from bridge import Bridge +from fish_show import FishShow +from constants import * + +import sys +sys.path.append('webapp') +from run import server_thread, send_queue, recv_queue + +def run_show(): + server_thread.start() + bridge = Bridge() + show = FishShow(bridge, send_queue=recv_queue, recv_queue=send_queue) + #show = SunriseShow(bridge) + show.run(framerate=FRAME_RATE) + +run_show()
\ No newline at end of file @@ -36,10 +36,3 @@ class Bridge(object): -def main(): - bridge = Bridge() - show = FishShow(bridge) - #show = SunriseShow(bridge) - show.run(framerate=FRAME_RATE) - -main() diff --git a/fish_show.py b/fish_show.py index 51693e4..d42e520 100644 --- a/fish_show.py +++ b/fish_show.py @@ -52,7 +52,7 @@ class Fish(object): if self.x < -self.width: self.x = constants.BRIDGE_WIDTH - print(self.x, self.y) + #print(self.x, self.y) def fix_direction(self): min_theta = -0.32 @@ -145,12 +145,17 @@ class FishShow(Show): self.lights = [Light(x, y, self.bridge.get_light(x, y)) for y in xrange(self.bridge.HEIGHT) for x in xrange(self.bridge.WIDTH)] - random_hue = random.random() - fish_color = color.HSV(random_hue, 1, 20/100).to_RGB() - self.fishes = [Fish(0, 0.5, 23, 1.5, fish_color, 1), Fish(100, 0.5, 23, 1.5, fish_color, 1)] + self.fishes = [] + self.send_event('new creature', {'name': 'test fishy'}) def update(self): + event = self.recv_event() + if event and event[0] == 'spawn': + random_hue = random.random() + fish_color = color.HSV(random_hue, 1, 20/100).to_RGB() + self.fishes.append(Fish(0, 0.5, 23, 1.5, fish_color, 1)) + for fish in self.fishes: fish.update() for light in self.lights: @@ -1,5 +1,6 @@ from __future__ import division, print_function import time +import Queue class Clock(object): def __init__(self): @@ -18,10 +19,12 @@ class Clock(object): class Show(object): - def __init__(self, bridge): + def __init__(self, bridge, send_queue, recv_queue): self.bridge = bridge self.clock = Clock() self.running = True + self.send_queue = send_queue + self.recv_queue = recv_queue self.init() def run(self, framerate=40): @@ -30,6 +33,16 @@ class Show(object): self.bridge.update() self.clock.tick(framerate) + def send_event(self, event_name, data=None): + self.send_queue.put((event_name, data)) + + def recv_event(self): + try: + msg = self.recv_queue.get_nowait() + return msg + except Queue.Empty: + return None + def init(self): """Override me""" raise NotImplementedError diff --git a/webapp/app/__init__.py b/webapp/app/__init__.py index 29cd22b..3e188ec 100644 --- a/webapp/app/__init__.py +++ b/webapp/app/__init__.py @@ -1,6 +1,11 @@ from flask import Flask import socketio +import Queue + +recv_queue = Queue.Queue() +send_queue = Queue.Queue() + sio = socketio.Server(async_mode='threading') app = Flask(__name__) app.wsgi_app = socketio.Middleware(sio, app.wsgi_app) diff --git a/webapp/app/templates/index.html b/webapp/app/templates/index.html index b0d9bb3..d4d1853 100644 --- a/webapp/app/templates/index.html +++ b/webapp/app/templates/index.html @@ -43,6 +43,8 @@ socket.on('disconnect', function() { console.log('disconnected'); }); + + socket.emit('ready'); }); </script> diff --git a/webapp/app/views.py b/webapp/app/views.py index 4aa2c05..1c68688 100644 --- a/webapp/app/views.py +++ b/webapp/app/views.py @@ -1,11 +1,9 @@ from flask import render_template, request -from app import app, sio +from app import app, sio, send_queue, recv_queue import time import threading -thread = None - @app.route('/') @app.route('/index') def index(): @@ -22,6 +20,14 @@ def connect(sid, environ): @sio.on('spawn', namespace='/spawn') def message(sid, data): print("message ", data) + send_queue.put(('spawn', data)) + +@sio.on('ready', namespace='/spawn') +def ready(sid): + print("got ready message from ", sid) + for event in received_events: + print "sending missed event", event + sio.emit(event[0], event[1], room=sid, namespace='/spawn') @sio.on('disconnect', namespace='/spawn') def disconnect(sid): @@ -29,9 +35,12 @@ def disconnect(sid): connections.remove(sid) +received_events = [] +def recv_events(): + while True: + event = recv_queue.get() + sio.emit(event[0], event[1], namespace='/spawn') + received_events.append(event) -def add_creature(): - time.sleep(5) - sio.emit('new creature', {'name': 'fish1'}, namespace='/spawn') -thread = sio.start_background_task(add_creature) +thread = sio.start_background_task(recv_events) diff --git a/webapp/run.py b/webapp/run.py index b5c8c6f..2290f41 100755 --- a/webapp/run.py +++ b/webapp/run.py @@ -3,5 +3,11 @@ import sys sys.path.append('packages') -from app import app -app.run(threaded=True, host='', port=8000) +import threading + +from app import app, send_queue, recv_queue + +def run_server(): + app.run(threaded=True, host='', port=8000) + +server_thread = threading.Thread(target=run_server) |
