From aa6411b75dec7e801b24e20457b6db66f582c501 Mon Sep 17 00:00:00 2001 From: Alexey Polyakov Date: Sun, 22 Mar 2026 17:09:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B0=D0=BC=D0=A2=D0=B0=D0=BC:=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8=D0=BA=205=20?= =?UTF-8?q?=D0=B8=201=20=D0=BE=D0=BF=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tamtam/models.py | 5 ++++- src/tamtam/processors/main.py | 35 ++++++++++++++++++++++++++++++++--- src/tamtam/socket.py | 4 ++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/tamtam/models.py b/src/tamtam/models.py index ffab737..84df963 100644 --- a/src/tamtam/models.py +++ b/src/tamtam/models.py @@ -34,4 +34,7 @@ class LoginPayloadModel(pydantic.BaseModel): token: str class SearchUsersPayloadModel(pydantic.BaseModel): - contactIds: list \ No newline at end of file + contactIds: list + +class PingPayloadModel(pydantic.BaseModel): + interactive: bool \ No newline at end of file diff --git a/src/tamtam/processors/main.py b/src/tamtam/processors/main.py index 8f2f59e..ee8d69b 100644 --- a/src/tamtam/processors/main.py +++ b/src/tamtam/processors/main.py @@ -1,5 +1,6 @@ +import pydantic from classes.baseprocessor import BaseProcessor -from tamtam.models import HelloPayloadModel +from tamtam.models import HelloPayloadModel, PingPayloadModel class MainProcessors(BaseProcessor): async def session_init(self, payload, seq, writer): @@ -7,7 +8,7 @@ class MainProcessors(BaseProcessor): # Валидируем данные пакета try: HelloPayloadModel.model_validate(payload) - except Exception as e: + except pydantic.ValidationError as error: await self._send_error(seq, self.opcodes.SESSION_INIT, self.error_types.INVALID_PAYLOAD, writer) return None, None @@ -33,4 +34,32 @@ class MainProcessors(BaseProcessor): # Отправляем await self._send(writer, packet) - return device_type, device_name \ No newline at end of file + return device_type, device_name + + async def ping(self, payload, seq, writer): + """Обработчик пинга""" + # Валидируем данные пакета + try: + PingPayloadModel.model_validate(payload) + except pydantic.ValidationError as error: + self.logger.error(f"Возникли ошибки при валидации пакета: {error}") + await self._send_error(seq, self.opcodes.PING, self.error_types.INVALID_PAYLOAD, writer) + return + + # Собираем пакет + packet = self.proto.pack_packet( + cmd=self.proto.CMD_OK, seq=seq, opcode=self.opcodes.PING, payload=None + ) + + # Отправляем + await self._send(writer, packet) + + async def log(self, payload, seq, writer): + """Обработчик лога""" + # Собираем пакет + packet = self.proto.pack_packet( + cmd=self.proto.CMD_OK, seq=seq, opcode=self.opcodes.LOG, payload=None + ) + + # Отправляем + await self._send(writer, packet) \ No newline at end of file diff --git a/src/tamtam/socket.py b/src/tamtam/socket.py index 6da1028..6724195 100644 --- a/src/tamtam/socket.py +++ b/src/tamtam/socket.py @@ -76,6 +76,10 @@ class TTMobileServer: match opcode: case self.opcodes.SESSION_INIT: deviceType, deviceName = await self.processors.session_init(payload, seq, writer) + case self.opcodes.PING: + await self.processors.ping(payload, seq, writer) + case self.opcodes.LOG: + await self.processors.log(payload, seq, writer) case self.opcodes.AUTH_REQUEST: if not self.auth_rate_limiter.is_allowed(address[0]): await self.processors._send_error(seq, self.opcodes.AUTH_REQUEST, self.processors.error_types.RATE_LIMITED, writer)