feat: 新增 tb_serialnet 透传发送表 + serialnet_loop 轮询下发 + B2响应匹配 + 超时检测

This commit is contained in:
wangfq
2026-05-28 09:40:28 +08:00
parent 97302caf6b
commit 7a6f56339c
3 changed files with 248 additions and 1 deletions

View File

@@ -32,6 +32,8 @@ from src.handlers import (
handle_tsreport,
handle_serial_net,
parse_loop,
serialnet_loop,
set_udp_sender,
)
logging.basicConfig(
@@ -40,6 +42,15 @@ logging.basicConfig(
)
logger = logging.getLogger("edc")
# 全局 UDP transport供 serialnet_loop 发送指令
_udp_transport: asyncio.DatagramTransport | None = None
def send_udp(data: bytes, addr: tuple[str, int]):
"""通过全局 UDP transport 发送数据"""
if _udp_transport:
_udp_transport.sendto(data, addr)
class EDCProtocol:
"""asyncio UDP 协议处理器"""
@@ -49,6 +60,8 @@ class EDCProtocol:
def connection_made(self, transport):
self.transport = transport
global _udp_transport
_udp_transport = transport
def datagram_received(self, data, addr):
asyncio.ensure_future(self._handle(data, addr))
@@ -169,6 +182,7 @@ async def main():
await init_pool()
asyncio.create_task(parse_loop())
asyncio.create_task(serialnet_loop())
loop = asyncio.get_running_loop()
@@ -177,6 +191,7 @@ async def main():
lambda: EDCProtocol(), # type: ignore[arg-type]
local_addr=(BIND_HOST, UDP_PORT),
)
set_udp_sender(send_udp) # 注入到 handlers 供 serialnet_loop 使用
logger.info(f"UDP 服务监听 {BIND_HOST}:{UDP_PORT}")
# UDP :5505