Thiết kế: IoT Bridge
Tài liệu này mô tả chi tiết thiết kế kỹ thuật của thành phần IoT Bridge trong ControlServer.
1. Tổng quan kiến trúc
1.1 Cấu trúc hệ thống
flowchart TB
subgraph Machine["IoT Machines"]
M1["Claw Machine 1"]
M2["Claw Machine 2"]
end
subgraph ControlServer["ControlServer (TCP 9999)"]
WS["WawaServer"]
CC["ConnectedClient Thread"]
MH["ClientMessageHandler"]
JMS["DynamicJmsListenerService"]
end
subgraph Infra["Infrastructure"]
Redis[("Redis\nMachine State")]
MQ[("ActiveMQ Artemis\nJMS Queues")]
end
M1 <-->|"TCP Binary Protocol"| WS
WS --> CC
CC --> MH
MH --> Redis
MH --> MQ
MQ --> JMS
JMS --> CC
2. Giao thức nhị phân (Binary Protocol)
2.1 Cấu trúc gói tin (Packet Structure)
Mỗi gói tin trao đổi giữa ControlServer và Machine tuân theo định dạng sau:
| Byte | Trường | Mô tả |
|---|---|---|
| 0 | Header | Luôn là 0xFE |
| 1-2 | MachineID | ID của máy (2 bytes, Little Endian) |
| 3-5 | NOT Header | Bitwise NOT của byte 0, 1, 2 |
| 6 | Length | Độ dài của payload |
| 7..N-1 | Payload | Dữ liệu/Lệnh thực tế |
| N | Checksum | sum(bytes[6..N-1]) % 100 |
2.2 Các mã lệnh tiêu biểu
0x31: Start Game0x32: Move Joystick0x34: Query Status0x3E: Query Game Result
3. Quản lý trạng thái (State Management)
ControlServer duy trì trạng thái "nóng" của máy trong Redis:
- Key: machine:status:{mac_address}
- Fields: status, ip, port, last_heartbeat.
4. Xử lý lỗi & Resilience
- Zombie Connections: Sử dụng cơ chế heartbeat; nếu quá 30 giây không nhận được dữ liệu, socket sẽ bị đóng.
- Resource Cleanup: Thread
ConnectedClientđược dọn dẹp ngay khi socketclose().