111 lines
2.8 KiB
Python
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()
|