You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1.6 KiB

---
title: Can总线服务类图
---
classDiagram
    class A8kCanBusService {
        
    } 
    
    class A8kCanBusConnection {
        + onOpen()
        + onMessage()
        + callcmd()
        + send()
        + moduleGetStatus()
    }
    
    class WebSocketClient
    
    A8kCanBusService --> A8kCanBusConnection
    A8kCanBusConnection --|> WebSocketClient

---
title: 收到设备发送的包处理流程
---
sequenceDiagram
    participant A8kCanBusConnection
    participant ByteArray
    participant A8kPacket
    participant ProcessContext
    participant AppEventBusService
    participant BlockingQueue
    
    A8kCanBusConnection ->>+ A8kCanBusConnection: onMessage 
    A8kCanBusConnection ->>+ A8kCanBusConnection: processCanRxMessage
    
    %% 将16进制字符串转换成二级制字节
    A8kCanBusConnection ->>+ ByteArray: hexStringToBytes()
    ByteArray ->>- A8kCanBusConnection: byte[]
    A8kCanBusConnection ->>+ A8kPacket: A8kPacket()
    A8kPacket ->>- A8kCanBusConnection: packet
    opt 包类型为PACKET_TYPE_ACK 或者 PACKET_TYPE_ERROR_ACK
        A8kCanBusConnection->>+ProcessContext: pushReceipt()
        
        %% 执行这边之前需要判断收到的包的序号是不是当前发送的包的序号相同,并且比较moduleId和commandId是否相等
        ProcessContext->>+BlockingQueue: add()
        BlockingQueue->>-ProcessContext: void
        ProcessContext->>-A8kCanBusConnection: void
    end
    
    opt 包类型为PACKET_TYPE_EVENT 处理设备上报事件
        A8kCanBusConnection->>+AppEventBusService: pushEvent()
        AppEventBusService->>-A8kCanBusConnection: void
    end