Skip to content

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 Game
  • 0x32: Move Joystick
  • 0x34: Query Status
  • 0x3E: 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 socket close().