summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ShowRunner.py16
-rwxr-xr-xbridge.py7
-rw-r--r--fish_show.py13
-rw-r--r--show.py15
-rw-r--r--webapp/app/__init__.py5
-rw-r--r--webapp/app/templates/index.html2
-rw-r--r--webapp/app/views.py23
-rwxr-xr-xwebapp/run.py10
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
diff --git a/bridge.py b/bridge.py
index 26beb24..91e81fb 100755
--- a/bridge.py
+++ b/bridge.py
@@ -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:
diff --git a/show.py b/show.py
index f8544c9..19066c0 100644
--- a/show.py
+++ b/show.py
@@ -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)