Starchik1 commited on
Commit
059bbb9
·
verified ·
1 Parent(s): 7fb5bf3

Create main.py

Browse files
Files changed (1) hide show
  1. main.py +66 -0
main.py ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, request, jsonify
2
+ from flask_socketio import SocketIO, emit
3
+ import uuid
4
+
5
+ app = Flask(__name__)
6
+ app.config['SECRET_KEY'] = 'secret!'
7
+ socketio = SocketIO(app)
8
+
9
+ # Словарь для хранения соответствия токена и идентификатора сессии (socket id)
10
+ clients = {} # {token: sid}
11
+
12
+ @app.route('/')
13
+ def index():
14
+ # Главная страница с базовой информацией
15
+ return render_template('index.html')
16
+
17
+ @app.route('/register')
18
+ def register():
19
+ # Генерация уникального токена для нового пользователя
20
+ token = str(uuid.uuid4())
21
+ # Изначально сессия не установлена
22
+ clients[token] = None
23
+ return render_template('register.html', token=token)
24
+
25
+ @app.route('/file/<token>')
26
+ def file_info(token):
27
+ """
28
+ Эндпоинт для проверки статуса клиента по токену.
29
+ Если клиент (отправитель) онлайн – возвращается статус "ready",
30
+ иначе – "offline".
31
+ """
32
+ if token in clients and clients[token] is not None:
33
+ return jsonify({"status": "ready"})
34
+ return jsonify({"status": "offline"})
35
+
36
+ @socketio.on('register')
37
+ def handle_register(data):
38
+ """
39
+ При подключении через WebSocket клиент отправляет свой токен.
40
+ Здесь мы сохраняем привязку токена к session id.
41
+ """
42
+ token = data.get('token')
43
+ if token:
44
+ clients[token] = request.sid
45
+ emit('registered', {'message': f'Токен {token} успешно зарегистрирован.'})
46
+ else:
47
+ emit('error', {'message': 'Токен отсутствует.'})
48
+
49
+ @socketio.on('signal')
50
+ def handle_signal(data):
51
+ """
52
+ Обработка сигналов для установления P2P-соединения.
53
+ Клиент передаёт объект с полями:
54
+ - target: токен целевого клиента
55
+ - signal: сигнальные данные (например, offer/answer ICE)
56
+ Сервер пересылает сигнал нужному клиенту по session id.
57
+ """
58
+ target = data.get('target')
59
+ signal_data = data.get('signal')
60
+ if target in clients and clients[target]:
61
+ socketio.emit('signal', {'signal': signal_data, 'from': request.sid}, room=clients[target])
62
+ else:
63
+ emit('error', {'message': 'Целевой клиент не доступен.'})
64
+
65
+ if __name__ == '__main__':
66
+ socketio.run(app, debug=True)