72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
|
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)
|