From fc2f88f14a4c107f4caa94437c1c64b9e53f8d8b Mon Sep 17 00:00:00 2001 From: 1 <1@72wo.cn> Date: Wed, 27 Aug 2025 18:06:33 +0000 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=BB=E5=8A=A1=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- logic/service/task/AcceptTask.go | 13 ++++++ logic/service/task/AddTask.go | 14 +++++++ logic/service/task/CompleteTask.go | 23 ++++++++++ logic/service/task/GetTask.go | 67 ++++++++++++++++++++++++++++++ 4 files changed, 117 insertions(+) create mode 100644 logic/service/task/AcceptTask.go create mode 100644 logic/service/task/AddTask.go create mode 100644 logic/service/task/CompleteTask.go create mode 100644 logic/service/task/GetTask.go diff --git a/logic/service/task/AcceptTask.go b/logic/service/task/AcceptTask.go new file mode 100644 index 000000000..91f68a756 --- /dev/null +++ b/logic/service/task/AcceptTask.go @@ -0,0 +1,13 @@ +package task + +import "blazing/common/socket/handler" + +// AcceptTaskInboundInfo 对应Java的AcceptTaskInboundInfo类 +// 用于接收任务的入站信息 +type AcceptTaskInboundInfo struct { + Head handler.TomeeHeader `cmd:"2201" struc:"[0]pad"` + TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long +} +type AcceptTaskOutboundInfo struct { + TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long +} diff --git a/logic/service/task/AddTask.go b/logic/service/task/AddTask.go new file mode 100644 index 000000000..7cea155eb --- /dev/null +++ b/logic/service/task/AddTask.go @@ -0,0 +1,14 @@ +package task + +import "blazing/common/socket/handler" + +// AddTaskBufInboundInfo 对应Java的AddTaskBufInboundInfo类 +// 用于接收添加任务缓冲区的入站信息 +type AddTaskBufInboundInfo struct { + Head handler.TomeeHeader `cmd:"2204" struc:"[0]pad"` + TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long + TaskList []byte `json:"taskList" description:"任务步骤信息" arraySerialize:"fixedLength=20"` // 任务步骤信息,对应Java的@ArraySerialize注解 +} +type AddTaskBufOutboundInfo struct { + // 该结构体没有字段,对应Java中的空类 +} diff --git a/logic/service/task/CompleteTask.go b/logic/service/task/CompleteTask.go new file mode 100644 index 000000000..be80784ed --- /dev/null +++ b/logic/service/task/CompleteTask.go @@ -0,0 +1,23 @@ +package task + +import "blazing/common/socket/handler" + +type CompleteTaskInboundInfo struct { + Head handler.TomeeHeader `cmd:"2202" struc:"[0]pad"` + TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long + OutState uint32 `json:"outState" description:"当前状态, 1为完成任务"` // 当前状态,1表示完成任务,对应Java的@UInt long +} +type CompleteTaskOutboundInfo struct { + TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long + PetTypeId uint32 `json:"petTypeId" description:"发放的精灵ID"` // 发放的精灵ID,对应Java的@UInt long + CaptureTime uint32 `json:"captureTime" description:"发放的精灵捕获时间"` // 发放的精灵捕获时间,对应Java的@UInt long + ItemLen uint32 `struc:"sizeof=ItemList"` + ItemList []ItemInfo `json:"itemList" description:"发放物品的数组"` // 发放物品的数组,对应Java的List +} + +// ItemInfo 对应Java的ItemInfo类 +// 用于表示发放物品的信息 +type ItemInfo struct { + ItemId uint64 `json:"itemId" description:"发放物品ID"` // 发放物品ID,对应Java的@UInt long + ItemCount uint64 `json:"itemCount" description:"发放物品的数量"` // 发放物品的数量,对应Java的@UInt long +} diff --git a/logic/service/task/GetTask.go b/logic/service/task/GetTask.go new file mode 100644 index 000000000..6d8cc24fc --- /dev/null +++ b/logic/service/task/GetTask.go @@ -0,0 +1,67 @@ +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 +}