|
from flask import Flask, render_template, request |
|
from flask_socketio import SocketIO, emit, join_room, leave_room |
|
import random |
|
|
|
app = Flask(__name__) |
|
app.config['SECRET_KEY'] = 'your_secret_key' |
|
socketio = SocketIO(app) |
|
|
|
|
|
questions = [ |
|
{"question": "What is the capital of France?", "options": ["Paris", "London", "Berlin", "Rome"]}, |
|
{"question": "What is the largest planet?", "options": ["Earth", "Mars", "Jupiter", "Saturn"]} |
|
] |
|
current_question = {"index": 0, "answers": {}} |
|
participants = {} |
|
|
|
@app.route('/') |
|
def index(): |
|
return "Welcome to the Quiz App" |
|
|
|
@app.route('/client') |
|
def client(): |
|
return render_template('client.html') |
|
|
|
@app.route('/host') |
|
def host(): |
|
return render_template('host.html') |
|
|
|
@socketio.on('join') |
|
def on_join(data): |
|
username = data['username'] |
|
participants[request.sid] = username |
|
join_room('quiz') |
|
emit('update_participants', participants, room='quiz') |
|
print(f"{username} joined the quiz.") |
|
|
|
@socketio.on('disconnect') |
|
def on_leave(): |
|
if request.sid in participants: |
|
username = participants[request.sid] |
|
leave_room('quiz') |
|
del participants[request.sid] |
|
emit('update_participants', participants, room='quiz') |
|
print(f"{username} left the quiz.") |
|
|
|
@socketio.on('request_question') |
|
def send_question(): |
|
index = current_question['index'] |
|
question = questions[index] |
|
emit('new_question', question, room=request.sid) |
|
|
|
@socketio.on('submit_answer') |
|
def receive_answer(data): |
|
username = participants.get(request.sid, "Unknown") |
|
answer = data['answer'] |
|
current_question['answers'][username] = answer |
|
emit('update_results', current_question['answers'], room='quiz') |
|
|
|
@socketio.on('next_question') |
|
def next_question(): |
|
current_question['index'] += 1 |
|
current_question['answers'] = {} |
|
if current_question['index'] < len(questions): |
|
question = questions[current_question['index']] |
|
emit('new_question', question, room='quiz') |
|
else: |
|
emit('quiz_end', room='quiz') |
|
|
|
if __name__ == '__main__': |
|
socketio.run(app, debug=True) |
|
|