Spaces:
Sleeping
Sleeping
| from flask import Flask, render_template, request, session, redirect, url_for | |
| from flask_socketio import join_room, leave_room, send, SocketIO | |
| import random | |
| from string import ascii_uppercase | |
| app = Flask(__name__) | |
| app.config["SECRET_KEY"] = "hjhjsdahhds" | |
| socketio = SocketIO(app) | |
| rooms = {} | |
| def generate_unique_code(length): | |
| while True: | |
| code = "" | |
| for _ in range(length): | |
| code += random.choice(ascii_uppercase) | |
| if code not in rooms: | |
| break | |
| return code | |
| def home(): | |
| session.clear() | |
| if request.method == "POST": | |
| name = request.form.get("name") | |
| code = request.form.get("code") | |
| join = request.form.get("join", False) | |
| create = request.form.get("create", False) | |
| if not name: | |
| return render_template("home.html", error="Please enter a name.", code=code, name=name) | |
| if join != False and not code: | |
| return render_template("home.html", error="Please enter a room code.", code=code, name=name) | |
| room = code | |
| if create != False: | |
| room = generate_unique_code(4) | |
| rooms[room] = {"members": 0, "messages": []} | |
| elif code not in rooms: | |
| return render_template("home.html", error="Room does not exist.", code=code, name=name) | |
| session["room"] = room | |
| session["name"] = name | |
| return redirect(url_for("room")) | |
| return render_template("home.html") | |
| def room(): | |
| room = session.get("room") | |
| if room is None or session.get("name") is None or room not in rooms: | |
| return redirect(url_for("home")) | |
| return render_template("room.html", code=room, messages=rooms[room]["messages"]) | |
| def message(data): | |
| room = session.get("room") | |
| if room not in rooms: | |
| return | |
| content = { | |
| "name": session.get("name"), | |
| "message": data["data"] | |
| } | |
| send(content, to=room) | |
| rooms[room]["messages"].append(content) | |
| print(f"{session.get('name')} said: {data['data']}") | |
| def connect(auth): | |
| room = session.get("room") | |
| name = session.get("name") | |
| if not room or not name: | |
| return | |
| if room not in rooms: | |
| leave_room(room) | |
| return | |
| join_room(room) | |
| send({"name": name, "message": "has entered the room"}, to=room) | |
| rooms[room]["members"] += 1 | |
| print(f"{name} joined room {room}") | |
| def disconnect(): | |
| room = session.get("room") | |
| name = session.get("name") | |
| leave_room(room) | |
| if room in rooms: | |
| rooms[room]["members"] -= 1 | |
| # if rooms[room]["members"] <= 0: | |
| # del rooms[room] | |
| send({"name": name, "message": "has left the room"}, to=room) | |
| print(f"{name} has left the room {room}") | |
| if __name__ == "__main__": | |
| socketio.run(app, debug=True) |