From f1ff4fd062cf5c411dffa09551da1d3f0cb73d70 Mon Sep 17 00:00:00 2001 From: Alexey Polyakov Date: Wed, 6 May 2026 15:58:27 +0300 Subject: [PATCH] =?UTF-8?q?MAX=20&&=20TT:=20=D0=BE=D0=B1=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B2=20=D1=82=D0=B0=D0=BC=D0=B5,=20=D0=B8=20?= =?UTF-8?q?=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B8=20=D0=BF=D0=BE=D0=B4=20=D0=B2=D0=B5=D0=B1=20?= =?UTF-8?q?=D0=BC=D0=BE=D1=80=D0=B4=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/oneme/controller.py | 22 +++++++--- src/oneme/websocket.py | 6 ++- src/tamtam/controller.py | 93 ++++++++++++++++++++++++++++++++++++++++ src/tamtam/socket.py | 6 ++- src/tamtam/websocket.py | 6 ++- 5 files changed, 120 insertions(+), 13 deletions(-) diff --git a/src/oneme/controller.py b/src/oneme/controller.py index 44a236b..ec57fda 100644 --- a/src/oneme/controller.py +++ b/src/oneme/controller.py @@ -10,13 +10,18 @@ from common.opcodes import Opcodes class OnemeController(ControllerBase): def __init__(self): self.config = ServerConfig() - self.proto = MobileProto() + self.proto_tcp = MobileProto() + self.proto_web = WebProto() self.opcodes = Opcodes() async def event(self, target, client, eventData): # Извлекаем тип события и врайтер eventType = eventData.get("eventType") writer = client.get("writer") + is_web = client.get("type") == "web" + + # Выбираем протокол в зависимости от типа подключения + proto = self.proto_web if is_web else self.proto_tcp # Не отправляем событие самому себе if writer == eventData.get("writer"): @@ -41,7 +46,7 @@ class OnemeController(ControllerBase): } # Создаем пакет - packet = self.proto.pack_packet( + packet = proto.pack_packet( cmd=0, seq=1, opcode=self.opcodes.NOTIF_MESSAGE, payload=payload ) elif eventType == "typing": @@ -58,7 +63,7 @@ class OnemeController(ControllerBase): } # Создаем пакет - packet = self.proto.pack_packet( + packet = proto.pack_packet( cmd=0, seq=1, opcode=self.opcodes.NOTIF_TYPING, payload=payload ) elif eventType == "profile_updated": @@ -71,7 +76,7 @@ class OnemeController(ControllerBase): } # Создаем пакет - packet = self.proto.pack_packet( + packet = proto.pack_packet( cmd=0, seq=1, opcode=self.opcodes.NOTIF_PROFILE, payload=payload ) elif eventType == "presence": @@ -85,13 +90,16 @@ class OnemeController(ControllerBase): "time": event_time } - packet = self.proto.pack_packet( + packet = proto.pack_packet( cmd=0, seq=1, opcode=self.opcodes.NOTIF_PRESENCE, payload=payload ) # Отправляем пакет - writer.write(packet) - await writer.drain() + if is_web: + await writer.send(packet) + else: + writer.write(packet) + await writer.drain() def launch(self, api): async def _start_all(): diff --git a/src/oneme/websocket.py b/src/oneme/websocket.py index 8113216..ecc0a0c 100644 --- a/src/oneme/websocket.py +++ b/src/oneme/websocket.py @@ -320,7 +320,8 @@ class OnemeWS: "writer": websocket, "ip": addr[0], "port": addr[1], - "protocol": "oneme" + "protocol": "oneme", + "type": "web" } ) else: @@ -334,7 +335,8 @@ class OnemeWS: "writer": websocket, "ip": addr[0], "port": addr[1], - "protocol": "oneme" + "protocol": "oneme", + "type": "web" } ] } diff --git a/src/tamtam/controller.py b/src/tamtam/controller.py index f4cedab..aa3e43c 100644 --- a/src/tamtam/controller.py +++ b/src/tamtam/controller.py @@ -3,10 +3,103 @@ from tamtam.socket import TamTamMobile from tamtam.websocket import TamTamWS from classes.controllerbase import ControllerBase from common.config import ServerConfig +from common.proto_tcp import MobileProto +from common.proto_web import WebProto +from common.opcodes import Opcodes class TTController(ControllerBase): def __init__(self): self.config = ServerConfig() + self.proto_tcp = MobileProto() + self.proto_web = WebProto() + self.opcodes = Opcodes() + + async def event(self, target, client, eventData): + # Извлекаем тип события и врайтер + eventType = eventData.get("eventType") + writer = client.get("writer") + is_web = client.get("type") == "web" + + # Выбираем протокол в зависимости от типа подключения + proto = self.proto_web if is_web else self.proto_tcp + + # Не отправляем событие самому себе + if writer == eventData.get("writer"): + return + + # Обрабатываем событие + if eventType == "new_msg": + # Данные сообщения + chatId = eventData.get("chatId") + message = eventData.get("message") + prevMessageId = eventData.get("prevMessageId") + time = eventData.get("time") + + # Данные пакета + payload = { + "chatId": chatId, + "message": message, + "prevMessageId": prevMessageId, + "ttl": False, + "unread": 0, + "mark": time + } + + # Создаем пакет + packet = proto.pack_packet( + cmd=0, seq=1, opcode=self.opcodes.NOTIF_MESSAGE, payload=payload + ) + elif eventType == "typing": + # Данные события + chatId = eventData.get("chatId") + userId = eventData.get("userId") + type = eventData.get("type") + + # Данные пакета + payload = { + "chatId": chatId, + "userId": userId, + "type": type + } + + # Создаем пакет + packet = proto.pack_packet( + cmd=0, seq=1, opcode=self.opcodes.NOTIF_TYPING, payload=payload + ) + elif eventType == "profile_updated": + # Данные события + profile = eventData.get("profile") + + # Данные пакета + payload = { + "profile": profile + } + + # Создаем пакет + packet = proto.pack_packet( + cmd=0, seq=1, opcode=self.opcodes.NOTIF_PROFILE, payload=payload + ) + elif eventType == "presence": + userId = eventData.get("userId") + presence = eventData.get("presence") + event_time = eventData.get("time") + + payload = { + "userId": userId, + "presence": presence, + "time": event_time + } + + packet = proto.pack_packet( + cmd=0, seq=1, opcode=self.opcodes.NOTIF_PRESENCE, payload=payload + ) + + # Отправляем пакет + if is_web: + await writer.send(packet) + else: + writer.write(packet) + await writer.drain() def launch(self, api): async def _start_all(): diff --git a/src/tamtam/socket.py b/src/tamtam/socket.py index fc37476..e0c8886 100644 --- a/src/tamtam/socket.py +++ b/src/tamtam/socket.py @@ -199,7 +199,8 @@ class TamTamMobile: "writer": writer, "ip": addr[0], "port": addr[1], - "protocol": "tamtam" + "protocol": "tamtam", + "type": "tcp" } ) else: @@ -211,7 +212,8 @@ class TamTamMobile: "writer": writer, "ip": addr[0], "port": addr[1], - "protocol": "tamtam" + "protocol": "tamtam", + "type": "tcp" } ] } diff --git a/src/tamtam/websocket.py b/src/tamtam/websocket.py index fd91888..b146188 100644 --- a/src/tamtam/websocket.py +++ b/src/tamtam/websocket.py @@ -187,7 +187,8 @@ class TamTamWS: "writer": websocket, "ip": addr[0], "port": addr[1], - "protocol": "tamtam" + "protocol": "tamtam", + "type": "web" } ) else: @@ -199,7 +200,8 @@ class TamTamWS: "writer": websocket, "ip": addr[0], "port": addr[1], - "protocol": "tamtam" + "protocol": "tamtam", + "type": "web" } ] }