Spaces:
Sleeping
Sleeping
| import os | |
| from flask import Flask, request, session | |
| from flask_cors import CORS | |
| from utils.config import Config | |
| from utils.extensions import ext | |
| from routes.auth import auth_bp | |
| from routes.conversations import conversations_bp | |
| from routes.query import query_bp | |
| from routes.admin import admin_bp | |
| from routes.pages import pages_bp | |
| # Khởi tạo Flask app | |
| app = Flask(__name__) | |
| CORS(app) | |
| # Load config | |
| app.config.from_object(Config) | |
| # Đảm bảo thư mục session tồn tại | |
| os.makedirs(app.config['SESSION_FILE_DIR'], exist_ok=True) | |
| # Khởi tạo các extension | |
| if not ext.initialize_all(app): | |
| print("Failed to initialize extensions. Exiting...") | |
| exit(1) | |
| # Đăng ký blueprints | |
| app.register_blueprint(auth_bp) | |
| app.register_blueprint(conversations_bp) | |
| app.register_blueprint(query_bp) | |
| app.register_blueprint(admin_bp) | |
| app.register_blueprint(pages_bp) | |
| # WebSocket handlers | |
| def handle_connect(auth=None): | |
| user_id = session.get('user_id') | |
| if user_id: | |
| ext.connected_clients[user_id] = request.sid | |
| try: | |
| from bson import ObjectId | |
| user = ext.db.users.find_one({'_id': ObjectId(user_id)}) | |
| if user: | |
| ext.socketio.emit('query_update', { | |
| 'query_count': user.get('query_count', 0), | |
| 'query_limit': user.get('query_limit', 3 if user.get('account_type') == 'limited' else None) | |
| }, room=request.sid) | |
| print(f"User {user_id} connected via WebSocket with SID {request.sid}") | |
| except Exception as e: | |
| print(f"Error in WebSocket connect for user {user_id}: {e}") | |
| else: | |
| ext.socketio.disconnect(request.sid) | |
| print("Unauthorized WebSocket connection attempt") | |
| def handle_disconnect(): | |
| user_id = session.get('user_id') | |
| if user_id in ext.connected_clients and ext.connected_clients[user_id] == request.sid: | |
| del ext.connected_clients[user_id] | |
| print(f"User {user_id} disconnected from WebSocket") | |
| if __name__ == '__main__': | |
| ext.socketio.run( | |
| app, | |
| host='0.0.0.0', | |
| port=int(os.getenv('PORT', 7860)), | |
| debug=True, | |
| allow_unsafe_werkzeug=True | |
| ) |