ТамТам: обработчик 5 и 1 опкода

This commit is contained in:
Alexey Polyakov 2026-03-22 17:09:20 +03:00
parent f2e7e37592
commit aa6411b75d
3 changed files with 40 additions and 4 deletions

View File

@ -34,4 +34,7 @@ class LoginPayloadModel(pydantic.BaseModel):
token: str
class SearchUsersPayloadModel(pydantic.BaseModel):
contactIds: list
contactIds: list
class PingPayloadModel(pydantic.BaseModel):
interactive: bool

View File

@ -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
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)

View File

@ -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)