From 64c7cf992a9d8821fdb29fdf035dc3cad54b956c Mon Sep 17 00:00:00 2001 From: manas12709 Date: Mon, 19 May 2025 09:03:07 -0700 Subject: [PATCH 01/10] server.py --- server.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 server.py diff --git a/server.py b/server.py new file mode 100644 index 0000000..69c2607 --- /dev/null +++ b/server.py @@ -0,0 +1,18 @@ +from flask import Flask, render_template +from flask_socketio import SocketIO, send + +app = Flask(__name__) +socketio = SocketIO(app, cors_allowed_origins="*") + +@app.route('/') +def index(): + return render_template('index.html') + +@socketio.on('message') +def handle_message(msg): + print(f"Received message: {msg}") + send(msg, broadcast=True) + +if __name__ == '__main__': + socketio.run(app, debug=True, port=4887) + From 24d164dd70825655cf8765b6a7bc225947175047 Mon Sep 17 00:00:00 2001 From: ArhaanM123! Date: Tue, 20 May 2025 09:27:34 -0700 Subject: [PATCH 02/10] added edits to save chats --- server.py | 49 +++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 6 deletions(-) diff --git a/server.py b/server.py index 69c2607..90fffda 100644 --- a/server.py +++ b/server.py @@ -1,18 +1,55 @@ -from flask import Flask, render_template -from flask_socketio import SocketIO, send +from flask import Flask, render_template, request +from flask_socketio import SocketIO, join_room, leave_room, send, emit +from collections import defaultdict app = Flask(__name__) socketio = SocketIO(app, cors_allowed_origins="*") +# Track users and messages per room +rooms_users = defaultdict(set) +chat_history = defaultdict(list) + @app.route('/') def index(): return render_template('index.html') +@socketio.on('join') +def on_join(data): + username = data['username'] + room = data['room'] + + join_room(room) + rooms_users[room].add(username) + + # Send existing chat history to the new user + for message in chat_history[room]: + emit('message', message, room=request.sid) + + send(f"{username} has joined the room.", room=room) + emit("user_list", list(rooms_users[room]), room=room) + +@socketio.on('leave') +def on_leave(data): + username = data['username'] + room = data['room'] + + leave_room(room) + rooms_users[room].discard(username) + + send(f"{username} has left the room.", room=room) + emit("user_list", list(rooms_users[room]), room=room) + @socketio.on('message') -def handle_message(msg): - print(f"Received message: {msg}") - send(msg, broadcast=True) +def handle_message(data): + room = data.get('room') + message = data.get('msg') + if room and message: + chat_history[room].append(message) + send(message, room=room) + +@socketio.on('disconnect') +def on_disconnect(): + print("A user disconnected") if __name__ == '__main__': socketio.run(app, debug=True, port=4887) - From 0b5bc1dad88424d3663cd740a834479e3581c652 Mon Sep 17 00:00:00 2001 From: ArhaanM123! Date: Wed, 21 May 2025 09:42:23 -0700 Subject: [PATCH 03/10] added api for all frontend code --- server.py | 1 + 1 file changed, 1 insertion(+) diff --git a/server.py b/server.py index 90fffda..8e547a9 100644 --- a/server.py +++ b/server.py @@ -53,3 +53,4 @@ def on_disconnect(): if __name__ == '__main__': socketio.run(app, debug=True, port=4887) + From d89cf7a13f082ac6c61a898849b46fc9afe4af00 Mon Sep 17 00:00:00 2001 From: manas12709 Date: Wed, 21 May 2025 10:19:48 -0700 Subject: [PATCH 04/10] reverting to main --- Period-5/aaak/messages.txt | 4 ---- main.py | 4 +--- 2 files changed, 1 insertion(+), 7 deletions(-) delete mode 100644 Period-5/aaak/messages.txt diff --git a/Period-5/aaak/messages.txt b/Period-5/aaak/messages.txt deleted file mode 100644 index 4f04e07..0000000 --- a/Period-5/aaak/messages.txt +++ /dev/null @@ -1,4 +0,0 @@ -Hey everyone! Just finished the new level, it's insane! -Did you see the latest update? So many cool features! - -hello bub \ No newline at end of file diff --git a/main.py b/main.py index 30e05ef..24039d5 100644 --- a/main.py +++ b/main.py @@ -10,8 +10,6 @@ from werkzeug.security import generate_password_hash import shutil - - # import "objects" from "this" project from __init__ import app, db, login_manager # Key Flask objects # API endpoints @@ -225,7 +223,7 @@ def restore_data_command(): # Register the custom command group with the Flask application app.cli.add_command(custom_cli) - + # this runs the flask application on the development server if __name__ == "__main__": # change name for testing From 15695d1ff64fa23dfc56bc4ae44f3b6a9313ef07 Mon Sep 17 00:00:00 2001 From: ArhaanM123! Date: Wed, 21 May 2025 10:20:03 -0700 Subject: [PATCH 05/10] made an api for web sockets --- server.py | 1 - 1 file changed, 1 deletion(-) diff --git a/server.py b/server.py index 8e547a9..90fffda 100644 --- a/server.py +++ b/server.py @@ -53,4 +53,3 @@ def on_disconnect(): if __name__ == '__main__': socketio.run(app, debug=True, port=4887) - From 1eeb33cbd2acf815154c252398c7facd7f67b72c Mon Sep 17 00:00:00 2001 From: ahmadimran2009 Date: Wed, 21 May 2025 18:48:53 -0700 Subject: [PATCH 06/10] connecting backend --- server.py | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/server.py b/server.py index 90fffda..c5245ba 100644 --- a/server.py +++ b/server.py @@ -5,7 +5,7 @@ app = Flask(__name__) socketio = SocketIO(app, cors_allowed_origins="*") -# Track users and messages per room +# Stores users and chat history for each room rooms_users = defaultdict(set) chat_history = defaultdict(list) @@ -14,42 +14,35 @@ def index(): return render_template('index.html') @socketio.on('join') -def on_join(data): +def handle_join(data): username = data['username'] room = data['room'] join_room(room) rooms_users[room].add(username) - # Send existing chat history to the new user - for message in chat_history[room]: - emit('message', message, room=request.sid) + # Send previous messages only to the joining user + for msg in chat_history[room]: + emit('message', msg, room=request.sid) - send(f"{username} has joined the room.", room=room) - emit("user_list", list(rooms_users[room]), room=room) + join_msg = f"{username} has joined the room." + chat_history[room].append(join_msg) + send(join_msg, room=room) -@socketio.on('leave') -def on_leave(data): - username = data['username'] - room = data['room'] - - leave_room(room) - rooms_users[room].discard(username) - - send(f"{username} has left the room.", room=room) - emit("user_list", list(rooms_users[room]), room=room) + emit('user_list', list(rooms_users[room]), room=room) @socketio.on('message') def handle_message(data): - room = data.get('room') - message = data.get('msg') - if room and message: - chat_history[room].append(message) - send(message, room=room) + room = data['room'] + msg = data['msg'] + + chat_history[room].append(msg) + send(msg, room=room) @socketio.on('disconnect') -def on_disconnect(): - print("A user disconnected") +def handle_disconnect(): + # Optional: You can handle user cleanup here with extra tracking + print(f"User with session ID {request.sid} disconnected.") if __name__ == '__main__': - socketio.run(app, debug=True, port=4887) + socketio.run(app, debug=True, port=8887) From 79fb56e91b9d4c6ce7d6a6f2886a3a8a180e5f6d Mon Sep 17 00:00:00 2001 From: ahmadimran2009 Date: Wed, 21 May 2025 19:22:22 -0700 Subject: [PATCH 07/10] slight adjustments --- server.py | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/server.py b/server.py index c5245ba..670a461 100644 --- a/server.py +++ b/server.py @@ -5,44 +5,52 @@ app = Flask(__name__) socketio = SocketIO(app, cors_allowed_origins="*") -# Stores users and chat history for each room +# Track users per room and chat history rooms_users = defaultdict(set) chat_history = defaultdict(list) @app.route('/') def index(): - return render_template('index.html') + return render_template('index.html') # Make sure index.html is in a /templates folder @socketio.on('join') def handle_join(data): - username = data['username'] - room = data['room'] + username = data.get('username') + room = data.get('room') + + if not username or not room: + return # Ignore invalid join attempts join_room(room) rooms_users[room].add(username) - # Send previous messages only to the joining user - for msg in chat_history[room]: - emit('message', msg, room=request.sid) + # Send chat history to the user who joined + for message in chat_history[room]: + emit('message', message, room=request.sid) + # Notify others in the room join_msg = f"{username} has joined the room." chat_history[room].append(join_msg) send(join_msg, room=room) + # Update the user list in the room emit('user_list', list(rooms_users[room]), room=room) @socketio.on('message') def handle_message(data): - room = data['room'] - msg = data['msg'] + room = data.get('room') + msg = data.get('msg') + + if not room or not msg: + return # Ignore invalid messages chat_history[room].append(msg) send(msg, room=room) @socketio.on('disconnect') def handle_disconnect(): - # Optional: You can handle user cleanup here with extra tracking - print(f"User with session ID {request.sid} disconnected.") + # Optional: remove user from room if you track user sessions + print(f"Client disconnected: {request.sid}") if __name__ == '__main__': socketio.run(app, debug=True, port=8887) From bac3563ee6192c875408cbb63a8debcc2f886808 Mon Sep 17 00:00:00 2001 From: ArhaanM123! Date: Wed, 21 May 2025 22:41:15 -0700 Subject: [PATCH 08/10] connecting our ports to the frontend --- server.py | 57 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/server.py b/server.py index 670a461..3520aba 100644 --- a/server.py +++ b/server.py @@ -1,56 +1,73 @@ from flask import Flask, render_template, request from flask_socketio import SocketIO, join_room, leave_room, send, emit from collections import defaultdict +from datetime import datetime app = Flask(__name__) socketio = SocketIO(app, cors_allowed_origins="*") -# Track users per room and chat history -rooms_users = defaultdict(set) -chat_history = defaultdict(list) +rooms_users = defaultdict(set) # Track usernames per room +chat_history = defaultdict(list) # Track message history per room + @app.route('/') def index(): - return render_template('index.html') # Make sure index.html is in a /templates folder + return render_template('index.html') + @socketio.on('join') def handle_join(data): username = data.get('username') room = data.get('room') + sid = request.sid if not username or not room: - return # Ignore invalid join attempts + return join_room(room) rooms_users[room].add(username) - # Send chat history to the user who joined + # Send chat history to new user for message in chat_history[room]: - emit('message', message, room=request.sid) + emit('message', message, room=sid) - # Notify others in the room - join_msg = f"{username} has joined the room." - chat_history[room].append(join_msg) - send(join_msg, room=room) - - # Update the user list in the room + # Broadcast join event + join_message = { + "username": "System", + "text": f"{username} has joined the room.", + "timestamp": datetime.utcnow().isoformat() + } + chat_history[room].append(join_message) + emit('message', join_message, room=room) emit('user_list', list(rooms_users[room]), room=room) + @socketio.on('message') def handle_message(data): + username = data.get('username') room = data.get('room') - msg = data.get('msg') + text = data.get('text') + + if not all([username, room, text]): + return - if not room or not msg: - return # Ignore invalid messages + message = { + "username": username, + "text": text, + "timestamp": datetime.utcnow().isoformat() + } + + chat_history[room].append(message) + emit('message', message, room=room) - chat_history[room].append(msg) - send(msg, room=room) @socketio.on('disconnect') def handle_disconnect(): - # Optional: remove user from room if you track user sessions - print(f"Client disconnected: {request.sid}") + sid = request.sid + print(f"User disconnected: {sid}") + # Optional: Clean up user tracking here + # You can emit a 'user_left' message if you store sid->username mapping + if __name__ == '__main__': socketio.run(app, debug=True, port=8887) From 48ab00055ed197ba70b62ef88577db9e022cb723 Mon Sep 17 00:00:00 2001 From: ArhaanM123! Date: Fri, 23 May 2025 08:43:14 -0700 Subject: [PATCH 09/10] did backend work --- api/id.py | 8 +++++++ api/user.py | 13 ++++++++++- main.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++- server.py | 2 ++ 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 api/id.py diff --git a/api/id.py b/api/id.py new file mode 100644 index 0000000..f184cc5 --- /dev/null +++ b/api/id.py @@ -0,0 +1,8 @@ +from flask import Blueprint, jsonify + +id_api = Blueprint('id_api', __name__, url_prefix='/api') + +@id_api.route('/id', methods=['GET']) +def get_id(): + # Example response + return jsonify({"id": 1}) \ No newline at end of file diff --git a/api/user.py b/api/user.py index 0d0641d..1548cb3 100644 --- a/api/user.py +++ b/api/user.py @@ -246,4 +246,15 @@ def get(self): api.add_resource(UserAPI._ID, '/id') api.add_resource(UserAPI._BULK_CRUD, '/users') api.add_resource(UserAPI._CRUD, '/user') -api.add_resource(UserAPI._Security, '/authenticate') \ No newline at end of file +api.add_resource(UserAPI._Security, '/authenticate') + +@user_api.route('/user', methods=['POST']) +def create_user_simple(): + data = request.json + # Add user creation logic here + return jsonify({"message": "User created"}), 201 + +@user_api.route('/user', methods=['GET']) +def get_user_simple(): + # Add user fetching logic here + return jsonify({"user": "example"}), 200 \ No newline at end of file diff --git a/main.py b/main.py index 24039d5..fbfa36a 100644 --- a/main.py +++ b/main.py @@ -9,6 +9,10 @@ from flask import current_app from werkzeug.security import generate_password_hash import shutil +from flask_cors import CORS +from flask_socketio import SocketIO, join_room, leave_room, send, emit +from collections import defaultdict +from datetime import datetime # import "objects" from "this" project from __init__ import app, db, login_manager # Key Flask objects @@ -26,6 +30,7 @@ from api.carChat import car_chat_api from api.vote import vote_api +from api.id import id_api # database Initialization functions from model.carChat import CarChat from model.user import User, initUsers @@ -51,6 +56,7 @@ app.register_blueprint(nestImg_api) app.register_blueprint(vote_api) app.register_blueprint(car_api) +app.register_blueprint(id_api) # Tell Flask-Login the view function name of your login route login_manager.login_view = "login" @@ -224,7 +230,64 @@ def restore_data_command(): # Register the custom command group with the Flask application app.cli.add_command(custom_cli) +CORS(app) # Enable CORS for all routes + +socketio = SocketIO(app, cors_allowed_origins="*") +rooms_users = defaultdict(set) # Track usernames per room +chat_history = defaultdict(list) # Track message history per room + +@socketio.on('join') +def handle_join(data): + username = data.get('username') + room = data.get('room') + sid = request.sid + + if not username or not room: + return + + join_room(room) + rooms_users[room].add(username) + + # Send chat history to new user + for message in chat_history[room]: + emit('message', message, room=sid) + + # Broadcast join event + join_message = { + "username": "System", + "text": f"{username} has joined the room.", + "timestamp": datetime.utcnow().isoformat() + } + chat_history[room].append(join_message) + emit('message', join_message, room=room) + emit('user_list', list(rooms_users[room]), room=room) + +@socketio.on('message') +def handle_message(data): + username = data.get('username') + room = data.get('room') + text = data.get('text') + + if not all([username, room, text]): + return + + message = { + "username": username, + "text": text, + "timestamp": datetime.utcnow().isoformat() + } + + chat_history[room].append(message) + emit('message', message, room=room) + +@socketio.on('disconnect') +def handle_disconnect(): + sid = request.sid + print(f"User disconnected: {sid}") + # Optional: Clean up user tracking here + # You can emit a 'user_left' message if you store sid->username mapping + # this runs the flask application on the development server if __name__ == "__main__": # change name for testing - app.run(debug=True, host="0.0.0.0", port="8887") + socketio.run(app, debug=True, host="0.0.0.0", port="8887") diff --git a/server.py b/server.py index 3520aba..2af2c52 100644 --- a/server.py +++ b/server.py @@ -2,8 +2,10 @@ from flask_socketio import SocketIO, join_room, leave_room, send, emit from collections import defaultdict from datetime import datetime +from flask_cors import CORS app = Flask(__name__) +CORS(app) # Enable CORS for all routes socketio = SocketIO(app, cors_allowed_origins="*") rooms_users = defaultdict(set) # Track usernames per room From 77d2326a30ca84ad4ade8fbd33d11e4e64b2b9db Mon Sep 17 00:00:00 2001 From: ArhaanM123! Date: Fri, 23 May 2025 09:13:12 -0700 Subject: [PATCH 10/10] fixed up login --- main.py | 2 +- server.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/main.py b/main.py index fbfa36a..bf0a55a 100644 --- a/main.py +++ b/main.py @@ -290,4 +290,4 @@ def handle_disconnect(): # this runs the flask application on the development server if __name__ == "__main__": # change name for testing - socketio.run(app, debug=True, host="0.0.0.0", port="8887") + socketio.run(app, debug=True, host="0.0.0.0", port="8000") diff --git a/server.py b/server.py index 2af2c52..1534b38 100644 --- a/server.py +++ b/server.py @@ -3,6 +3,7 @@ from collections import defaultdict from datetime import datetime from flask_cors import CORS +from flask_socketio import SocketIO, join_room, leave_room, send, emit app = Flask(__name__) CORS(app) # Enable CORS for all routes