feat: 新增 tb_serialnet 透传发送表 + serialnet_loop 轮询下发 + B2响应匹配 + 超时检测
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user