Files
bl/logic/service/task/GetTask.go
2025-08-27 18:06:33 +00:00

68 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package task
import (
"blazing/common/socket/handler"
"encoding/binary"
"errors"
"github.com/pointernil/bitset32"
)
type GetTaskBufInboundInfo struct {
Head handler.TomeeHeader `cmd:"2203" struc:"[0]pad"`
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID对应Java的@UInt long
}
type GetTaskBufOutboundInfo struct {
TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID对应Java的@UInt long
Flag uint32 `json:"flag" description:"暂时未知"` // 暂时未知对应Java的@UInt long
TaskList []uint32 `struc:"[20]byte"` // 任务步骤信息对应Java的@ArraySerialize注解
}
// 获得任务数组
func (t *GetTaskBufOutboundInfo) GetList() *bitset32.BitSet32 {
return bitset32.From(t.TaskList)
}
// BytesToInt32Slice 将[]byte转换为[]int32
// 注意src长度必须是4的倍数因为每个int32由4字节组成
// order参数指定字节序binary.BigEndian 或 binary.LittleEndian
func BytesToInt32Slice(src []byte, order binary.ByteOrder) ([]int32, error) {
// 检查输入长度是否为4的倍数
if len(src)%4 != 0 {
return nil, errors.New("输入字节切片长度必须是4的倍数")
}
// 计算目标切片长度
dstLen := len(src) / 4
dst := make([]int32, dstLen)
// 逐个转换4字节为int32
for i := 0; i < dstLen; i++ {
// 计算当前位置的字节偏移
offset := i * 4
// 读取4字节并转换为uint32再转换为int32
dst[i] = int32(order.Uint32(src[offset : offset+4]))
}
return dst, nil
}
// Int32SliceToBytes 将[]int32转换回[]byte
// order参数指定字节序binary.BigEndian 或 binary.LittleEndian
func Int32SliceToBytes(src []int32, order binary.ByteOrder) []byte {
// 计算目标字节切片长度
dst := make([]byte, len(src)*4)
// 逐个将int32转换为4字节
for i, v := range src {
// 计算当前位置的字节偏移
offset := i * 4
// 将int32转换为uint32再写入字节切片
order.PutUint32(dst[offset:offset+4], uint32(v))
}
return dst
}