Files
venture/venture/app.py

111 lines
2.8 KiB
Python

from flask import Flask, request, session
from flask_socketio import SocketIO, emit, join_room
from gencode import make_code
from game import Game
app = Flask('venture')
socketio = SocketIO(app, cors_allowed_origins="*")
games = {}
# Display
@socketio.on('new-game')
def on_newgame():
session.room = make_code()
session.game = Game(session.room)
games[session.room] = session.game
session.game.display = request.sid
join_room(session.room)
emit('set-code', {'code': session.room})
# Contestant
@socketio.on('contestant-join')
def on_join_contestant(data):
signature = data['signature']
session.room = data['room']
join_room(session.room)
session.game = games[session.room]
session.game.add_contestant(request.sid, signature)
emit('contestant-joined', {'sid': request.sid,
'signature': signature}, to=session.room)
@socketio.on('buzz')
def on_buzz():
contestant = session.game.contestants[request.sid]
if contestant.locked or not session.game.buzzers_armed:
return
session.game.buzzing_contestant = contestant
session.game.buzzers_armed = False
emit('contestant-buzzed', {'sid': request.sid}, to=session.room)
# Host
@socketio.on('host-join')
def on_join_host(data):
session.room = data['room']
join_room(session.room)
session.game = games[session.room]
session.game.host = request.sid
emit('host-joined', {'sid': request.sid}, to=session.room)
@socketio.on('host-start')
def on_host_start():
session.game.load_clues()
emit('categories', session.game.categories, to=session.game.host)
emit('categories', session.game.categories, to=session.game.display)
@socketio.on('activate-clue')
def on_activate_clue(data):
name = data['name']
value = data['value']
clues = session.game.categories.get(name)
for contestant in session.game.contestants.values():
contestant.locked = False
if clues:
match = None
for clue in clues:
if clue['value'] == value:
match = clue
break
if match:
emit('active-clue', match, to=session.room)
@socketio.on('start-clue-clock')
def on_start_clue_clock():
session.game.buzzers_armed = True
emit('clue-clock-on', to=session.room)
@socketio.on('clue-clock-timeout')
def on_clue_clock_timeout():
if session.game.buzzers_armed:
session.game.buzzers_armed = False
emit('clue-clock-off', to=session.room)
@socketio.on('contestant-correct')
def on_contestant_correct():
emit('contestant-scores', to=session.room)
@socketio.on('contestant-incorrect')
def on_contestant_incorrect():
session.game.buzzing_contestant.locked = True
session.game.buzzers_armed = True
emit('contestant-penalized', to=session.room)
def main():
socketio.run(app, host='0.0.0.0', debug=True)
if __name__ == '__main__':
main()