package utils import ( "sync/atomic" ) type ConnectContext struct { UUID string SN string XlogPackageParser *XlogPackageParser SendBuffer atomic.Value DoneChan chan string // 用来回传结果的 channel } // Site基本信息 type XlogSiteBaseInfo struct { SN [48]byte MAC [20]byte } // EncryptData解密后类型 type XlogHandshakePackageData struct { NewIv [16]byte // 新的IV,用于后续通讯 DevUuid [36]byte // 设备UUID } type XlogHandshakePackage struct { MagicWord uint32 // Magic word CmdLen uint32 // 数据长度 = XlogPackage总长度 - 8(MagicWord长度) EncryptData [64]byte // } type XlogHandshakeResponsePackage struct { MagicWord uint32 // Magic word EncryptData [64]byte // } type XlogPackageHeader struct { MagicWord uint32 // Magic word CmdLen uint32 // 数据长度 = XlogPackage总长度 - 8(MagicWord长度) MainCmd uint8 // 命令类型 CmdType - MainCmd SubCmd uint8 // 命令类型 CmdType - SubCmd ControlBitData uint16 // 控制位数据 DstServiceName [12]byte // 目标服务名称 ToBeSendLen uint32 // 发送这包之前,已经缓存的数据,这个值通常要是0,表示网络非常好,没有缓存数据 IgnoredLen uint32 // 忽略的字节数 UpTime uint32 } type XlogPackage struct { Header XlogPackageHeader EncryptPayload []byte // 数据 } // 必须用构造函数NewXlogPackageParser创建 type XlogPackageParser struct { crypt XlogEncrypt ctx *ConnectContext cmdResultStr string Handshake bool // 连接是否已握手 Buffer []byte // 接收数据缓存buffer,数据可能不完整,需预处理 }