diff --git a/logic/controller/controller.go b/logic/controller/controller.go index d4946252..da327765 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -7,6 +7,7 @@ import ( "blazing/cool" "blazing/logic/service" "os" + "strings" "time" "bytes" @@ -89,32 +90,35 @@ func init() { //默认初始化扫描 methodValue := value.MethodByName(method.Name) fmt.Println("找到注册方法", method.Name) methodValue.Type().NumIn() - var func_cmd = getcmd(methodValue.Type().In(0)) - if func_cmd == 0 { //说明不是注册方法 - glog.Warning(context.Background(), "方法参数必须是结构体", method.Name, "跳过注册") - continue + + for _, func_cmd := range getcmd(methodValue.Type().In(0)) { + if func_cmd == 0 { //说明不是注册方法 + glog.Warning(context.Background(), "方法参数必须是结构体", method.Name, "跳过注册") + continue + } + + if cool.Config.PortBL == 0 && func_cmd > 1000 { //判断login服务器 + continue + + } + + if cool.Config.PortBL != 0 && func_cmd < 1000 { //判断login服务器 + continue + + } + glog.Debug(context.Background(), "注册方法", func_cmd, method.Name) + // fmt.Println(methodValue.Interface().(func(gnet.Conn, handler.TomeeHeader))) + _, ok := cool.CmdCache.LoadOrStore(func_cmd, methodValue) //TODO 待实现对不同用户初始化方法以取消全局cmdcache + + if ok { //方法已存在init + glog.Error(context.Background(), "方法已存在init,不会初始化后面的方法", func_cmd) + } } - if cool.Config.PortBL == 0 && func_cmd > 1000 { //判断login服务器 - continue - - } - - if cool.Config.PortBL != 0 && func_cmd < 1000 { //判断login服务器 - continue - - } - glog.Debug(context.Background(), "注册方法", func_cmd, method.Name) - // fmt.Println(methodValue.Interface().(func(gnet.Conn, handler.TomeeHeader))) - _, ok := cool.CmdCache.LoadOrStore(func_cmd, methodValue) //TODO 待实现对不同用户初始化方法以取消全局cmdcache - - if ok { //方法已存在init - glog.Error(context.Background(), "方法已存在init,不会初始化后面的方法", func_cmd) - } } } -func getcmd(t reflect.Type) uint32 { +func getcmd(t reflect.Type) []uint32 { // 处理指针类型 if t.Kind() == reflect.Ptr { t = t.Elem() // 获取指针指向的类型 @@ -123,7 +127,7 @@ func getcmd(t reflect.Type) uint32 { // 确保是结构体 if t.Kind() != reflect.Struct { - return 0 + return []uint32{0} } // 遍历结构体字段 @@ -135,7 +139,7 @@ func getcmd(t reflect.Type) uint32 { if field.Type == reflect.TypeOf(handler.TomeeHeader{}) { // fmt.Println(reflect.ValueOf(field)) - return gconv.Uint32(field.Tag.Get("cmd")) + return gconv.SliceUint32(strings.Split(field.Tag.Get("cmd"), "|")) } @@ -150,7 +154,7 @@ func getcmd(t reflect.Type) uint32 { } // fmt.Println() } - return 0 + return []uint32{0} } // 遍历结构体方法并执行RECV_cmd diff --git a/logic/controller/map.go b/logic/controller/map.go index 6fa94b2f..7abfb6ad 100644 --- a/logic/controller/map.go +++ b/logic/controller/map.go @@ -21,7 +21,7 @@ func (h *Controller) MapEnter(data *maps.InInfo, c *entity.Player) (result *maps data.Broadcast(c.MapId, *tt) //同步广播 // 如果是无怪地图,直接返回 - if mservice.NewMonsterService().GetId(c.MapId) == 0 { + if mservice.NewMonsterService().GetId(c.MapId) == nil { return nil, -1 } diff --git a/logic/controller/task.go b/logic/controller/task.go index 2fea3eca..59feb063 100644 --- a/logic/controller/task.go +++ b/logic/controller/task.go @@ -13,28 +13,48 @@ import ( */ func (h Controller) AcceptTask(data *task.AcceptTaskInboundInfo, c *entity.Player) (result *task.AcceptTaskOutboundInfo, err errorcode.ErrorCode) { + if data.Head.CMD == 2201 { //判断不是每日任务 + service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool { + ft, ok := ttt[data.TaskId] + if ok { //如果找到任务 + if ft.Status == 0 { //可以接受 + ft.Status = 1 //接受 + return true + } else { + return false + } + } else { + ttt[data.TaskId] = model.TaskInfo{ + Status: 1, + } + + } + + return false + }) + } else { + service.NewUserService(c.UserID).DailyTaskExec(func(ttt map[uint32]model.DailyTaskInfo) bool { + ft, ok := ttt[data.TaskId] + if ok { //如果找到任务 + if ft.Status == 0 { //可以接受 + ft.Status = 1 //接受 + return true + } else { + return false + } + } else { + ttt[data.TaskId] = model.DailyTaskInfo{ + Status: 1, + } + + } + + return false + }) + } + result = &task.AcceptTaskOutboundInfo{} result.TaskId = data.TaskId - - service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool { - ft, ok := ttt[data.TaskId] - if ok { //如果找到任务 - if ft.Status == 0 { //可以接受 - ft.Status = 1 //接受 - return true - } else { - return false - } - } else { - ttt[data.TaskId] = model.TaskInfo{ - Status: 1, - } - - } - - return false - }) - return result, 0 } @@ -42,15 +62,71 @@ func (h Controller) AcceptTask(data *task.AcceptTaskInboundInfo, c *entity.Playe * 更新任务步骤 */ func (h Controller) AddTaskBuf(data *task.AddTaskBufInboundInfo, c *entity.Player) (result *task.AddTaskBufOutboundInfo, err errorcode.ErrorCode) { - service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool { - if conditions, ok := ttt[data.TaskId]; ok { - conditions.TaskInfo = data.TaskList - ttt[data.TaskId] = conditions - return true - } - return false - }) + if data.Head.CMD == 2204 { //判断不是每日任务 + service.NewUserService(c.UserID).TaskExec(func(ttt map[uint32]model.TaskInfo) bool { + if conditions, ok := ttt[data.TaskId]; ok { + conditions.TaskInfo = data.TaskList + ttt[data.TaskId] = conditions + return true + } + + return false + }) + } else { + service.NewUserService(c.UserID).DailyTaskExec(func(ttt map[uint32]model.DailyTaskInfo) bool { + if conditions, ok := ttt[data.TaskId]; ok { + conditions.DailyTaskInfo = data.TaskList + ttt[data.TaskId] = conditions + return true + } + + return false + }) + + } return &task.AddTaskBufOutboundInfo{}, 0 } + +/** + * 完成任务 + */ +func (h Controller) Complete_Task(data *task.CompleteTaskInboundInfo, c *entity.Player) (result *task.CompleteTaskOutboundInfo, err errorcode.ErrorCode) { + + if data.Head.CMD == 2202 { //判断不是每日任务 + + } else { + + } + + return &task.CompleteTaskOutboundInfo{}, 0 +} + +/** + * 获取任务状态 + */ +func (h Controller) Get_Task_Buf(data *task.GetTaskBufInboundInfo, c *entity.Player) (result *task.GetTaskBufOutboundInfo, err errorcode.ErrorCode) { + + if data.Head.CMD == 2203 { //判断不是每日任务 + + } else { + + } + + return &task.GetTaskBufOutboundInfo{}, 0 +} + +/** + * 删除任务 + */ +func (h Controller) Delete_Task(data *task.DeleteTaskInboundInfo, c *entity.Player) (result *task.DeleteTaskOutboundInfo, err errorcode.ErrorCode) { + + if data.Head.CMD == 2205 { //判断不是每日任务 + + } else { + + } + + return &task.DeleteTaskOutboundInfo{}, 0 +} diff --git a/logic/service/maps/mapin.go b/logic/service/maps/mapin.go index 48f1d63d..df05c2c7 100644 --- a/logic/service/maps/mapin.go +++ b/logic/service/maps/mapin.go @@ -73,7 +73,7 @@ func (t *InInfo) genMonster(mapid uint32) OgreInfo { for i := 0; i < 3; i++ { ttt := OgrePetInfo{} - ttt.Id = mservice.NewMonsterService().GetId(mapid) //待修改成xml获取 + // ttt.Id = mservice.NewMonsterService().GetId(mapid) //待修改成xml获取 ttt.Shiny = uint32(i + 1) //异色概率,待实现自定义 //t1.Data[i] = mservice.NewMonsterService().GetId(c.MapId) diff --git a/logic/service/task/AcceptTask.go b/logic/service/task/AcceptTask.go index ea6d66f4..58270079 100644 --- a/logic/service/task/AcceptTask.go +++ b/logic/service/task/AcceptTask.go @@ -5,7 +5,7 @@ import "blazing/common/socket/handler" // AcceptTaskInboundInfo 对应Java的AcceptTaskInboundInfo类 // 用于接收任务的入站信息 type AcceptTaskInboundInfo struct { - Head handler.TomeeHeader `cmd:"2201" struc:"[0]pad"` + Head handler.TomeeHeader `cmd:"2201|2231" struc:"[0]pad"` TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long } diff --git a/logic/service/task/AddTask.go b/logic/service/task/AddTask.go index a1d5b254..defecfca 100644 --- a/logic/service/task/AddTask.go +++ b/logic/service/task/AddTask.go @@ -5,7 +5,7 @@ import "blazing/common/socket/handler" // AddTaskBufInboundInfo 对应Java的AddTaskBufInboundInfo类 // 用于接收添加任务缓冲区的入站信息 type AddTaskBufInboundInfo struct { - Head handler.TomeeHeader `cmd:"2204" struc:"[0]pad"` + Head handler.TomeeHeader `cmd:"2204|2235" struc:"[0]pad"` TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long TaskList []uint32 `struc:"[20]byte"` // 任务步骤信息,对应Java的@ArraySerialize注解 } diff --git a/logic/service/task/CompleteTask.go b/logic/service/task/CompleteTask.go index be80784e..56c701e6 100644 --- a/logic/service/task/CompleteTask.go +++ b/logic/service/task/CompleteTask.go @@ -3,7 +3,7 @@ package task import "blazing/common/socket/handler" type CompleteTaskInboundInfo struct { - Head handler.TomeeHeader `cmd:"2202" struc:"[0]pad"` + Head handler.TomeeHeader `cmd:"2202|2233" struc:"[0]pad"` TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long OutState uint32 `json:"outState" description:"当前状态, 1为完成任务"` // 当前状态,1表示完成任务,对应Java的@UInt long } diff --git a/logic/service/task/Delete_Task.go b/logic/service/task/Delete_Task.go new file mode 100644 index 00000000..df69bae9 --- /dev/null +++ b/logic/service/task/Delete_Task.go @@ -0,0 +1,12 @@ +package task + +import "blazing/common/socket/handler" + +// DeleteTaskInboundInfo 对应Java的DeleteTaskInboundInfo类 +type DeleteTaskInboundInfo struct { + Head handler.TomeeHeader `cmd:"2205|2232" struc:"[0]pad"` + TaskId uint32 `json:"taskId" description:"任务ID"` // 使用uint64对应Java的@UInt long +} +type DeleteTaskOutboundInfo struct { + TaskId uint32 `json:"taskId" description:"任务ID"` // 对应@UInt long和@FieldDescription +} diff --git a/logic/service/task/GetTask.go b/logic/service/task/GetTask.go index 6d8cc24f..4e5b49f0 100644 --- a/logic/service/task/GetTask.go +++ b/logic/service/task/GetTask.go @@ -9,7 +9,7 @@ import ( ) type GetTaskBufInboundInfo struct { - Head handler.TomeeHeader `cmd:"2203" struc:"[0]pad"` + Head handler.TomeeHeader `cmd:"2203|2234" struc:"[0]pad"` TaskId uint32 `json:"taskId" description:"任务ID"` // 任务ID,对应Java的@UInt long } diff --git a/login/main.go b/login/main.go index 080f5666..4fb8b849 100644 --- a/login/main.go +++ b/login/main.go @@ -1,6 +1,10 @@ package main import ( + "fmt" + "reflect" + "strings" + _ "github.com/gogf/gf/contrib/nosql/redis/v2" _ "blazing/contrib/drivers/pgsql" @@ -23,12 +27,13 @@ import ( "blazing/login/internal/cmd" "github.com/gogf/gf/v2/os/gctx" + "github.com/gogf/gf/v2/util/gconv" ) var tt task.GetTaskBufOutboundInfo func main() { - // Test_kick() + //Test_kick() cmd.Main.Run(gctx.New()) } @@ -44,3 +49,23 @@ func kick(id int) { // fmt.Println(err) // }() } + +type ssss struct { + ttt int `cmd:"111|222"` +} + +func Test_kick() { + value := reflect.ValueOf(ssss{}) + + // 获取类型 + typ := value.Type() + // 遍历结构体字段 + // fmt.Printf("结构体 %s 的字段信息:\n", t.Name()) + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + t := field.Tag.Get("cmd") + //t1 := strings.Split(t, "|") + t2 := gconv.SliceUint32(strings.Split(t, "|")) + fmt.Println(t2) + } +}