def show_results(): admin = data.admins[flask.request.sid] session = admin.session results = [] for _, user in data.iterate_users(): if user.session == session and user.username is not None: results.append({'user': user.username, 'count': 0}) for index, question in enumerate(session.questions): question_num = index if question_num in user.answers: if user.answers[question_num] == question.answers[ question.answer]: results[-1]['count'] += 1 results = sorted(results, key=lambda user: user['count'], reverse=True) flask_socketio.emit('update', render_show_results(session, results), room=flask.request.sid) for _, user in data.iterate_users(): if user.session == admin.session: flask_socketio.emit('update', render_show_results(user.session, results), room=user.sid)
def socket_pass_question(): user = data.admins[ flask.request.sid] if flask.request.sid in data.admins else data.users[ flask.request.sid] if isinstance(user.session.questions[user.session.question_num], data.RandomQuestion): # Re-randomise answerer user.session.questions[ user.session.question_num].answerer = random.choice([ other_user for _, other_user in data.users.items() if other_user.session == user.session and other_user.colour ]) # Relay change for _, other_user in data.iterate_users(): if other_user.session == user.session and other_user.colour: flask_socketio.emit('update', render_question( other_user, other_user.session, other_user.session.question_num), room=other_user.sid) flask_socketio.emit('update_left', render_sidebar(other_user, user.session), room=other_user.sid) for _, _admin in data.iterate_admins(): if _admin.session == user.session: flask_socketio.emit('update', render_question_admin( _admin.session, _admin.session.question_num), room=_admin.sid) flask_socketio.emit('update_left', render_sidebar(_admin, user.session), room=_admin.sid)
def do_goto_question(_session, question_num): # Cleanup old question if isinstance(_session.questions[_session.question_num], data.SpeedQuestion): if _session.questions[_session.question_num].timer_thread is not None: _session.questions[_session.question_num].timer_thread.stop() _session.question_num = question_num # Do work for some questions if isinstance(_session.questions[question_num], data.RandomQuestion): _session.questions[question_num].answerer = random.choice([ other_user for _, other_user in data.users.items() if other_user.session == _session and other_user.colour ]) # Relay change for _, other_user in data.iterate_users(): if other_user.session == _session and other_user.colour: flask_socketio.emit('update', render_question(other_user, _session, _session.question_num), room=other_user.sid) flask_socketio.emit('update_left', render_sidebar(other_user, _session), room=other_user.sid) for _, _admin in data.iterate_admins(): if _admin.session == _session: flask_socketio.emit('update', render_question_admin(_session, _session.question_num), room=_admin.sid) flask_socketio.emit('update_left', render_sidebar(_admin, _session), room=_admin.sid)
def socket_answer(question_num, answer): user = data.users[flask.request.sid] if question_num == user.session.question_num: if isinstance(user.session.questions[user.session.question_num], data.SpeedQuestion): if question_num in user.answers: # Only one shot! return user.answers[question_num] = answer if isinstance(user.session.questions[user.session.question_num], data.MCQQuestion): flask_socketio.emit('update', render_question(user, user.session, user.session.question_num), room=user.sid) # Hurry! if isinstance(user.session.questions[user.session.question_num], data.SpeedQuestion): if user.session.questions[user.session.question_num].timer_thread is None: user.session.questions[user.session.question_num].timer_thread = data.SpeedQuestionTimerThread( flask.copy_current_request_context(do_goto_question), user.session, user.session.question_num + 1) user.session.questions[user.session.question_num].timer_thread.start() # Relay change for _, other_user in data.iterate_users(): if other_user.session == user.session: flask_socketio.emit('update_left', render_sidebar(other_user, user.session), room=other_user.sid) if isinstance(user.session.questions[user.session.question_num], data.SpeedQuestion): flask_socketio.emit('update', render_question(other_user, user.session, user.session.question_num), room=other_user.sid) for _, _admin in data.iterate_admins(): if _admin.session == user.session: flask_socketio.emit('update', render_question_admin(user.session, user.session.question_num), room=_admin.sid) flask_socketio.emit('update_left', render_sidebar(_admin, user.session), room=_admin.sid)
def socket_reveal_answers(question_num): admin = data.admins[flask.request.sid] admin.session.questions[question_num].revealed = True flask_socketio.emit('update', render_question_admin(admin.session, admin.session.question_num), room=flask.request.sid) for _, user in data.iterate_users(): if user.session == admin.session: flask_socketio.emit('update', render_question_admin( admin.session, admin.session.question_num, is_admin=False), room=user.sid)
def socket_answer(question_num, answer): user = data.sids_to_user[flask.request.sid] if user.session.questions[user.session.question_num].revealed: return if question_num == user.session.question_num: user.answers[question_num] = answer[0] if isinstance(user.session.questions[user.session.question_num], data.MCQQuestion): flask_socketio.emit('update', render_question(user, user.session, user.session.question_num), room=user.sid) # Relay change for _, other_user in data.iterate_users(): if other_user.session == user.session: flask_socketio.emit('update_left', render_sidebar(other_user, user.session), room=other_user.sid) if isinstance( user.session.questions[user.session.question_num], data.SpeedQuestion): flask_socketio.emit('update', render_question( other_user, user.session, user.session.question_num), room=other_user.sid) for _, _admin in data.iterate_admins(): if _admin.session == user.session: flask_socketio.emit('update', render_question_admin( user.session, user.session.question_num), room=_admin.sid) flask_socketio.emit('update_left', render_sidebar(_admin, user.session), room=_admin.sid)
def do_goto_question(_session, question_num): _session.question_num = question_num # Relay change for _, other_user in data.iterate_users(): if other_user.session == _session and other_user.username: flask_socketio.emit('update', render_question(other_user, _session, _session.question_num), room=other_user.sid) flask_socketio.emit('update_left', render_sidebar(other_user, _session), room=other_user.sid) for _, _admin in data.iterate_admins(): if _admin.session == _session: flask_socketio.emit('update', render_question_admin(_session, _session.question_num), room=_admin.sid) flask_socketio.emit('update_left', render_sidebar(_admin, _session), room=_admin.sid)