74 lines
1.7 KiB
Python
74 lines
1.7 KiB
Python
from flask_socketio import SocketIO, emit, join_room
|
|
from flask import Flask, render_template, redirect, request, url_for, jsonify
|
|
|
|
from util.room.registry import RoomRegistry
|
|
from util.room.logic import generate_room_code
|
|
|
|
ROOMS = set()
|
|
|
|
app = Flask(
|
|
__name__,
|
|
template_folder="resource/template",
|
|
static_folder="resource/static"
|
|
)
|
|
socketio = SocketIO(app)
|
|
|
|
registry = RoomRegistry()
|
|
|
|
@app.route('/')
|
|
def index():
|
|
return render_template("home.html")
|
|
|
|
@app.route('/settings')
|
|
def settings():
|
|
return render_template("settings.html")
|
|
|
|
@app.route('/room/<room_code>')
|
|
def room(room_code):
|
|
return render_template('room.html', room_code=room_code)
|
|
|
|
@socketio.on('message')
|
|
def handle_message(data):
|
|
room_code = data['room']
|
|
sender = data['sender']
|
|
text = data['text']
|
|
|
|
room = registry.get_room(room_code)
|
|
if room:
|
|
room.add_message(sender, text)
|
|
emit('message', {'sender': sender, 'text': text}, to=room_code)
|
|
|
|
|
|
@app.route('/api/room', methods=['POST'])
|
|
def create_room():
|
|
data = request.json
|
|
code = generate_room_code()
|
|
password = data.get("password")
|
|
room = registry.create_room(code, password)
|
|
return jsonify({"code": room.code})
|
|
|
|
@app.route('/api/room/<code>/messages')
|
|
def get_messages(code):
|
|
room = registry.get_room(code)
|
|
if not room:
|
|
return jsonify({"error": "Room not found"}), 404
|
|
return jsonify(room.messages)
|
|
|
|
|
|
@socketio.on('join')
|
|
def handle_join(data):
|
|
room = data['room']
|
|
sender = data.get('sender', 'Anonymous')
|
|
join_room(room)
|
|
|
|
emit('message', {
|
|
'sender': 'System',
|
|
'text': f'{sender} has joined the room.'
|
|
}, to=room)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
socketio.run(app, debug=False, host='0.0.0.0', port=8080)
|
|
|