Fix asyncio event loop error in Flask routes

parent 340465fa
......@@ -42,6 +42,7 @@ active_terminals = {}
debug = False
server_password = None
args = None
loop = None
# Flask app for web interface
app = Flask(__name__)
......@@ -184,7 +185,7 @@ def connect_terminal(client_id):
if client_id in clients:
request_id = str(uuid.uuid4())
active_terminals[request_id] = {'client_id': client_id, 'username': username, 'data': []}
asyncio.create_task(send_terminal_request(request_id, client_id, username))
loop.call_soon_threadsafe(lambda: asyncio.create_task(send_terminal_request(request_id, client_id, username)))
return jsonify({'request_id': request_id})
return jsonify({'error': 'Client not connected'}), 400
......@@ -202,7 +203,7 @@ def terminal_data(client_id):
request_id = request.form.get('request_id')
data = request.form.get('data')
if request_id in active_terminals:
asyncio.create_task(send_terminal_data(request_id, active_terminals[request_id]['client_id'], data))
loop.call_soon_threadsafe(lambda: asyncio.create_task(send_terminal_data(request_id, active_terminals[request_id]['client_id'], data)))
return 'OK'
else:
request_id = request.args.get('request_id')
......@@ -224,7 +225,7 @@ async def send_terminal_data(request_id, client_id, data):
def disconnect_terminal(client_id):
request_id = request.form.get('request_id')
if request_id in active_terminals:
asyncio.create_task(send_terminal_close(request_id, active_terminals[request_id]['client_id']))
loop.call_soon_threadsafe(lambda: asyncio.create_task(send_terminal_close(request_id, active_terminals[request_id]['client_id'])))
del active_terminals[request_id]
return 'OK'
......@@ -373,6 +374,9 @@ async def main():
# Start WebSocket server
ws_server = await websockets.serve(handle_websocket, args.host, args.port, ssl=ssl_context)
global loop
loop = asyncio.get_running_loop()
print(f"WebSocket SSH Daemon running on {args.host}:{args.port}")
# Start web interface if specified
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment