Files
weidian/server/app.py

79 lines
2.3 KiB
Python
Raw Normal View History

import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from flask import Flask, redirect, url_for
from flask_socketio import SocketIO
from server.database import init_db
from server.routers import accounts, tasks, orders
socketio = SocketIO(cors_allowed_origins="*")
def create_app():
app = Flask(
__name__,
template_folder=os.path.join(os.path.dirname(__file__), '..', 'templates'),
static_folder=os.path.join(os.path.dirname(__file__), '..', 'static'),
)
app.secret_key = 'snatcher-secret-key-change-me'
init_db()
app.register_blueprint(accounts.bp)
app.register_blueprint(tasks.bp)
app.register_blueprint(orders.bp)
@app.route('/')
def index():
return redirect(url_for('tasks.list_tasks'))
socketio.init_app(app)
_register_socketio_events()
return app
def _register_socketio_events():
import asyncio
from server.services.remote_browser import get_session
@socketio.on('rb_mouse', namespace='/rb')
def handle_mouse(data):
s = get_session(data.get('session_id', ''))
if s and s.loop and s.loop.is_running():
asyncio.run_coroutine_threadsafe(
s.handle_mouse(
data.get('action', 'click'),
data.get('x', 0), data.get('y', 0)),
s.loop)
@socketio.on('rb_keyboard', namespace='/rb')
def handle_keyboard(data):
s = get_session(data.get('session_id', ''))
if s and s.loop and s.loop.is_running():
text = data.get('text', '')
if text:
asyncio.run_coroutine_threadsafe(
s.handle_keyboard(text), s.loop)
@socketio.on('rb_key', namespace='/rb')
def handle_key(data):
s = get_session(data.get('session_id', ''))
if s and s.loop and s.loop.is_running():
key = data.get('key', '')
if key:
asyncio.run_coroutine_threadsafe(
s.handle_key(key), s.loop)
@socketio.on('rb_close', namespace='/rb')
def handle_close(data):
from server.services.remote_browser import close_session
close_session(data.get('session_id', ''))
if __name__ == '__main__':
app = create_app()
socketio.run(app, host='0.0.0.0', port=9000, debug=True)