mirror of
https://github.com/openmax-server/server.git
synced 2026-06-13 06:11:41 +03:00
first commit
This commit is contained in:
61
src/tamtam_ws/server.py
Normal file
61
src/tamtam_ws/server.py
Normal file
@@ -0,0 +1,61 @@
|
||||
import asyncio, logging, json
|
||||
from websockets.asyncio.server import serve
|
||||
from tamtam_ws.models import *
|
||||
from pydantic import ValidationError
|
||||
from tamtam_ws.proto import Proto
|
||||
from tamtam_ws.processors import Processors
|
||||
|
||||
class TTWSServer:
|
||||
def __init__(self, host, port, db_pool=None, clients={}, send_event=None):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.proto = Proto()
|
||||
self.processors = Processors(db_pool=db_pool, clients=clients, send_event=send_event)
|
||||
self.logger = logging.getLogger(__name__)
|
||||
|
||||
async def handle_client(self, websocket):
|
||||
deviceType = None
|
||||
deviceName = None
|
||||
|
||||
async for message in websocket:
|
||||
# Распаковываем пакет
|
||||
packet = self.proto.unpack_packet(message)
|
||||
|
||||
# Валидируем структуру пакета
|
||||
try:
|
||||
MessageModel.model_validate(packet)
|
||||
except ValidationError as e:
|
||||
self.logger.error(e)
|
||||
|
||||
# Извлекаем данные из пакета
|
||||
seq = packet['seq']
|
||||
opcode = packet['opcode']
|
||||
payload = packet['payload']
|
||||
|
||||
match opcode:
|
||||
case self.proto.SESSION_INIT:
|
||||
# ПРИВЕТ АНДРЕЙ МАЛАХОВ
|
||||
# не не удаляй этот коммент. пусть останется на релизе аххахаха
|
||||
deviceType, deviceType = await self.processors.process_hello(payload, seq, websocket)
|
||||
case self.proto.PING:
|
||||
await self.processors.process_ping(payload, seq, websocket)
|
||||
case self.proto.LOG:
|
||||
# телеметрия аааа слежка цру фсб фбр
|
||||
# УДАЛЯЕМ MYTRACKER ИЗ TAMTAM ТАМ ВИРУС
|
||||
# майтрекер отправляет все ваши сообщения на сервер барака обамы. немедленно удаляем!!!
|
||||
await self.processors.process_telemetry(payload, seq, websocket)
|
||||
# case self.proto.AUTH_REQUEST:
|
||||
# await self.processors.process_auth_request(payload, seq, websocket)
|
||||
# case self.proto.VERIFY_CODE:
|
||||
# await self.processors.process_verify_code(payload, seq, websocket)
|
||||
# case self.proto.FINAL_AUTH:
|
||||
# await self.processors.process_final_auth(payload, seq, websocket, deviceType, deviceName)
|
||||
|
||||
# лан я пойду. пока
|
||||
# а ок
|
||||
|
||||
async def start(self):
|
||||
self.logger.info(f"Вебсокет запущен на порту {self.port}")
|
||||
|
||||
async with serve(self.handle_client, self.host, self.port):
|
||||
await asyncio.Future()
|
||||
Reference in New Issue
Block a user