import traceback from multiprocessing import freeze_support from typing import List from flask import Flask, jsonify, request from flask_cors import CORS from flask_sock import Sock from werkzeug.serving import ThreadedWSGIServer from Backend.consensus import * class Backend: def __init__(self, name, domain="0.0.0.0", port=0, debug=False): # 网络配置 self.port = port self.domain = domain # 后端app self.app = Flask(name) self.sock = Sock(self.app) # 跨域配置 CORS(self.app, supports_credentials=True) self.app.debug = debug # 基本地址 self.base_url = '/' # 获得系统状态 self.register(name="system_status", func=self.system_status, methods=[REQUEST_MODE_GET]) self.register(name="post_test", func=self.post_test, methods=[REQUEST_MODE_POST]) # 注册后端接口 def register(self, name, func, methods: List): self.app.add_url_rule( rule=f"{self.base_url}{name}", methods=methods, view_func=func, endpoint=name ) # 注册WebSocket接口 def register_websocket(self, name, func): @self.sock.route(f"{self.base_url}{name}", endpoint=name) def sock_func(ws): func(ws) @staticmethod def system_status(): try: return jsonify({"status": STATUS_OK}) except Exception as e: error_msg = { "status": STATUS_UNKNOWN_ERROR, "error_message": f"后端系统启动失败({e.args}),错误来源:{traceback.format_exc()}" } return jsonify(error_msg) @staticmethod def post_test(): try: data = request.get_json() return jsonify({"status": STATUS_OK, "post_data": data}) except Exception as e: error_msg = { "status": STATUS_UNKNOWN_ERROR, "error_message": f"后端系统错误({e.args}),错误来源:{traceback.format_exc()}" } return jsonify(error_msg) def start_backend(self): server = ThreadedWSGIServer(app=self.app, port=self.port, host=self.domain) server.serve_forever(0.001)