import os, sys from flask_sqlalchemy import SQLAlchemy from flask_socketio import SocketIO from flask_cors import CORS from db.user_list import UserList from db.course_list import CourseList from .services.my_function import MyFunction from flask_pymongo import PyMongo from qcloud_cos import CosConfig from qcloud_cos import CosS3Client mongo = PyMongo() socketio = SocketIO(cors_allowed_origins="*") # 不直接传 app cors = CORS() # ===== 你的全局对象 ===== # Backboard from backboardManager import BackBoardManager # 你已有的类 backboard_manager = BackBoardManager() # 用户映射(全局内存结构) userid_recorder = {} # 你代码里有使用 users_list = UserList() uuid2username = {} # 你的映射,或换成数据库访问层 username2uuid = {} course_list = CourseList() user_id2UserClass = {} from AlgoriAgent.projects.algoriAgent.agent_manager import AgentManager agent_manager = AgentManager() def init_extensions(app): # 第三方 socketio.init_app( app, cors_allowed_origins='*',#app.config["VSCODE_WEB_URL"], ping_timeout=app.config["SOCKETIO_PING_TIMEOUT"], ping_interval=app.config["SOCKETIO_PING_INTERVAL"], ) cors.init_app( app, resources={r"/*": {"origins": app.config["VSCODE_WEB_URL"]}}, supports_credentials=True, ) # 把自定义对象挂到 app.extensions,供各处通过 current_app 访问 app.extensions["users_list"] = users_list app.extensions["course_list"] = course_list app.extensions["backboard_manager"] = backboard_manager app.extensions["uuid2username"] = uuid2username app.extensions["username2uuid"] = username2uuid app.extensions["userid_recorder"] = userid_recorder app.extensions["user_id2UserClass"] = user_id2UserClass app.extensions["agent_manager"] = agent_manager app.extensions["my_function"] = MyFunction() mongo.init_app(app,uri=app.config["MONGO_URI"]) app.extensions["mongo"] = mongo cos_config = CosConfig( Region=app.config["TENCENT_COS"]["region"], SecretId=app.config["TENCENT_COS"]["secret_id"], SecretKey=app.config["TENCENT_COS"]["secret_key"], ) cos_client = CosS3Client(cos_config) app.extensions["cos_client"] = cos_client def register_namespaces(app): """把所有 Socket.IO namespaces 注册到 socketio""" # 延迟导入以避免循环 from .sockets.namespaces import VSCodeNamespace, AgentNamespace socketio.on_namespace(VSCodeNamespace("/vscode")) socketio.on_namespace(AgentNamespace("/agent"))