ТамТам: обработчик 5 и 1 опкода
This commit is contained in:
parent
f2e7e37592
commit
aa6411b75d
|
|
@ -34,4 +34,7 @@ class LoginPayloadModel(pydantic.BaseModel):
|
||||||
token: str
|
token: str
|
||||||
|
|
||||||
class SearchUsersPayloadModel(pydantic.BaseModel):
|
class SearchUsersPayloadModel(pydantic.BaseModel):
|
||||||
contactIds: list
|
contactIds: list
|
||||||
|
|
||||||
|
class PingPayloadModel(pydantic.BaseModel):
|
||||||
|
interactive: bool
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
|
import pydantic
|
||||||
from classes.baseprocessor import BaseProcessor
|
from classes.baseprocessor import BaseProcessor
|
||||||
from tamtam.models import HelloPayloadModel
|
from tamtam.models import HelloPayloadModel, PingPayloadModel
|
||||||
|
|
||||||
class MainProcessors(BaseProcessor):
|
class MainProcessors(BaseProcessor):
|
||||||
async def session_init(self, payload, seq, writer):
|
async def session_init(self, payload, seq, writer):
|
||||||
|
|
@ -7,7 +8,7 @@ class MainProcessors(BaseProcessor):
|
||||||
# Валидируем данные пакета
|
# Валидируем данные пакета
|
||||||
try:
|
try:
|
||||||
HelloPayloadModel.model_validate(payload)
|
HelloPayloadModel.model_validate(payload)
|
||||||
except Exception as e:
|
except pydantic.ValidationError as error:
|
||||||
await self._send_error(seq, self.opcodes.SESSION_INIT,
|
await self._send_error(seq, self.opcodes.SESSION_INIT,
|
||||||
self.error_types.INVALID_PAYLOAD, writer)
|
self.error_types.INVALID_PAYLOAD, writer)
|
||||||
return None, None
|
return None, None
|
||||||
|
|
@ -33,4 +34,32 @@ class MainProcessors(BaseProcessor):
|
||||||
|
|
||||||
# Отправляем
|
# Отправляем
|
||||||
await self._send(writer, packet)
|
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)
|
||||||
|
|
@ -76,6 +76,10 @@ class TTMobileServer:
|
||||||
match opcode:
|
match opcode:
|
||||||
case self.opcodes.SESSION_INIT:
|
case self.opcodes.SESSION_INIT:
|
||||||
deviceType, deviceName = await self.processors.session_init(payload, seq, writer)
|
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:
|
case self.opcodes.AUTH_REQUEST:
|
||||||
if not self.auth_rate_limiter.is_allowed(address[0]):
|
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)
|
await self.processors._send_error(seq, self.opcodes.AUTH_REQUEST, self.processors.error_types.RATE_LIMITED, writer)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue