diff --git a/src/HttpServer/jsonconf/TaskConfig.json b/src/HttpServer/jsonconf/TaskConfig.json index 870c897..7527404 100644 --- a/src/HttpServer/jsonconf/TaskConfig.json +++ b/src/HttpServer/jsonconf/TaskConfig.json @@ -3,6 +3,7 @@ "id": 1, "type": 1, "day_type": 1, + "aims": 5, "active": 5, "coin": 10, "desc": "在线5min" @@ -11,6 +12,7 @@ "id": 2, "type": 1, "day_type": 1, + "aims": 30, "active": 10, "coin": 40, "desc": "在线30mins" @@ -19,6 +21,7 @@ "id": 3, "type": 1, "day_type": 2, + "aims": 5, "active": 5, "coin": 30, "desc": "游戏中消耗5次体力" @@ -27,6 +30,7 @@ "id": 4, "type": 1, "day_type": 3, + "aims": 1, "active": 10, "coin": 30, "desc": "单局成绩超过2000分" @@ -35,6 +39,7 @@ "id": 5, "type": 1, "day_type": 4, + "aims": 5, "active": 20, "coin": 50, "desc": "观看满5次视频" @@ -43,6 +48,7 @@ "id": 6, "type": 1, "day_type": 5, + "aims": 5, "active": 20, "coin": 40, "desc": "进行转盘抽奖5次" @@ -51,6 +57,7 @@ "id": 7, "type": 1, "day_type": 6, + "aims": 3, "active": 30, "coin": 60, "desc": "开福袋3次" @@ -59,6 +66,7 @@ "id": 8, "type": 1, "day_type": 7, + "aims": 1, "active": 15, "coin": 30, "desc": "放飞火箭1次" @@ -67,6 +75,7 @@ "id": 9, "type": 1, "day_type": 8, + "aims": 2, "active": 20, "coin": 50, "desc": "游戏内重生2次" @@ -75,6 +84,7 @@ "id": 10, "type": 1, "day_type": 9, + "aims": 5, "active": 15, "coin": 50, "desc": "游戏中使用5次道具" @@ -83,6 +93,7 @@ "id": 11, "type": 2, "day_type": 0.0, + "aims": 0.0, "active": 30, "coin": 150, "desc": "" @@ -91,6 +102,7 @@ "id": 12, "type": 2, "day_type": 0.0, + "aims": 0.0, "active": 80, "coin": 400, "desc": "" @@ -99,6 +111,7 @@ "id": 13, "type": 2, "day_type": 0.0, + "aims": 0.0, "active": 150, "coin": 600, "desc": "" diff --git a/src/HttpServer/jsonconf/jsonconf.go b/src/HttpServer/jsonconf/jsonconf.go index 2940a6f..de38c0b 100644 --- a/src/HttpServer/jsonconf/jsonconf.go +++ b/src/HttpServer/jsonconf/jsonconf.go @@ -24,6 +24,7 @@ type TaskDesc struct { Id int `json:"id"` Type int `json:"type"` Day_type int `json:"day_type"` + Aims int `json:"aims"` Active int `json:"active"` Coin int `json:"coin"` Desc string `json:"desc"` diff --git a/src/HttpServer/logic/constdef.go b/src/HttpServer/logic/constdef.go index 296b8aa..0df680c 100644 --- a/src/HttpServer/logic/constdef.go +++ b/src/HttpServer/logic/constdef.go @@ -2,34 +2,36 @@ package logic //任务成就类型枚举 协议上报用 const ( - TASKTYPE_PASSLEVEL = 1 //表示通过x关卡 - TASKTYPE_GETREDBAG = 2 //3表示观看x次广告 - TASKTYPE_WATCHADS = 3 //领取x次红包 - TASKTYPE_KILLSTAR = 4 //4表示消除x颗星星 - TASKTYPE_USEITEM = 5 //5表示使用x次道具 - TASKTYPE_PLAYSMALLGAMES = 6 //6表示试玩15s小游戏 - + TASKTYPE_COSTTILI = 1 //消耗体力 + TASKTYPE_REACH2000 = 2 //表示单句达到2000 + TASKTYPE_WATCHADS = 3 //表示观看视频次数 + TASKTYPE_TURNTABLE = 4 //4抽奖次数 + TASKTYPE_LUCKYBAG = 5 //5表示福袋次数 + TASKTYPE_ROCKETTIMES = 6 //6表示火箭次数 + TASKTYPE_RELIVECNT = 7 //表示重生 + TASKTYPE_USEITEMTIMES = 8 //8表示使用道具次数 + ACHIEVE_KILLLINE = 9 //表示消除行数 ) //任务类型 对应表 const ( - DAILY_TASKTYPE_LOGIN = 1 //1 每日登录 - DAILY_TASKTYPE_GETGUANCNT = 2 //提取存钱罐 - DAILY_TASKTYPE_PASSLEVEL = 3 //近日通过关 - DAILY_TASKTYPE_USEITEM = 4 //使用道具数 - DAILY_TASKTYPE_GETREDBAG = 5 //领取红包次数 - DAILY_TASKTYPE_GETGUANGOLD = 6 //收取金币x枚 - DAILY_TASKTYPE_ONLINEMIN = 7 //在线分钟数 - DAILY_TASKTYPE_PLAYSMALLGAME = 8 //试玩小游戏15s + DAILY_TASKTYPE_ONLINEMIN = 1 //在线分钟数 + DAILY_TASKTYPE_COSTTILI = 2 //使用体力 + DAILY_TASKTYPE_REACH2000 = 3 //单局达到2000 + DAILY_TASKTYPE_WATCHAD = 4 //观看视频次数 + DAILY_TASKTYPE_DRAMTURN = 5 //抽奖次数 + DAILY_TASKTYPE_GETLUCKYBAG = 6 //开福袋次数 + DAILY_TASKTYPE_USEROCKET = 7 //开火箭次数 + DAILY_TASKTYPE_RELIVE = 8 //重生次数 + DAILY_TASKTYPE_USEITEME = 9 //使用道具次数 ) //成就类型 对应表 const ( - ACHIEVETYPE_WATCHADDS = 1 //累计观看广告次数 - ACHIEVETYPE_USERLV = 2 //人物等级 - ACHIEVETYPE_KILLSTAR = 3 //累计消除星星数 - ACHIEVETYPE_GETGUANCNT = 4 //累计存钱罐提取 - ACHIEVETYPE_USEITEMCNT = 5 //累计道具使用 + ACHIEVETYPE_GETSCORE = 1 //累计达到分数 + ACHIEVETYPE_LOGINDAY = 2 //累计登录天数 + ACHIEVETYPE_WATCHADDS = 3 //累计观看广告次数 + ACHIEVETYPE_KILLLINE = 4 //累计消除行数 ) diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index e7dbb34..a86e74e 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -312,10 +312,8 @@ type OnlinentfResp struct { } type UpdatetaskReq struct { - Tasktype int `json:"tasktype"` - Value int `json:"value"` - Gameid string `json:"gameid"` - Channel string `json:"channel"` + Tasktype int `json:"tasktype"` + Value int `json:"value"` } type UpdatetaskResp struct { @@ -324,9 +322,7 @@ type UpdatetaskResp struct { } type QuerytaskinfoReq struct { - Tasktype int `json:"tasktype"` - Gameid string `json:"gameid"` - Channel string `json:"channel"` + Tasktype int `json:"tasktype"` } type QuerytaskinfoResp struct { @@ -336,21 +332,13 @@ type QuerytaskinfoResp struct { } type GettaskrewardReq struct { - Tasktype int `json:"tasktype"` - Taskid int `json:"taskid"` - Gameid string `json:"gameid"` - Channel string `json:"channel"` + Tasktype int `json:"tasktype"` + Taskid int `json:"taskid"` } type GettaskrewardData struct { - Lv int `json:"lv"` - Costtime int `json:"costtime"` - Rewardstar int `json:"rewardstar"` - Chuiitem int `json:"chuiitem"` - Shuaitem int `json:"shuaitem"` - Swapitem int `json:"swapitem"` - Eliminitem int `json:"eliminitem"` Goldnum int `json:"goldnum"` + Walletgold int `json:"walletgold"` } type GettaskrewardResp struct { Code int `json:"code"` @@ -443,24 +431,29 @@ type TaskListDesc struct { type TaskList struct { Taskdata []TaskListDesc `json:"taskdata"` + Huoyue int `json:"huoyue"` } //其中提取次数和当日登陆在userdata中记录 type TaskInfo struct { - OnlineMin int //在线分钟数 - PassLevel int //通过关卡数 - UseItemCnt int //使用道具次数 - GetRedbagCnt int //领取红包次数 - GetGuanGold int //收集金币数 - PlaySmall int //当日是否试玩小游戏15s 次数 + OnlineMin int //在线分钟数 + CostTili int //在游戏内消耗体力 + OutScore int //单局超过2000分次数 + WatchAdCnt int //观看视频次数 + DrawTurnTableCnt int //转盘抽奖次数 + OpenLuckBagCnt int //开福袋次数 + UseRocketCnt int //开火箭次数 + RelivegCnt int //重生次数 + UseItemCnt int //使用道具次数 + HuoYue int //当天活跃值 } // type AchieveMentInfo struct { - WatchAdsCnt int //观看广告数 - KillStar int //消除星星数 - SumGetGuan int //存钱罐累计提取 - SumUseItemCnt int //使用道具次数累计 + WatchAdsCnt int //观看视频数 + KillStar int //消除行数 + //SumGetGuan int //存钱罐累计提取 + //SumUseItemCnt int //使用道具次数累计 } type WithDrawList struct { diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 0cc6f92..9745b8a 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -25,6 +25,302 @@ func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid,Gameid,Channel") } +func (v *TaskList) Len() int { + return len(v.Taskdata) +} + +func (v *TaskList) Swap(i, j int) { + v.Taskdata[i], v.Taskdata[j] = v.Taskdata[j], v.Taskdata[i] +} + +func (v *TaskList) Less(i, j int) bool { + if v.Taskdata[i].Taskstatus == v.Taskdata[j].Taskstatus { + return v.Taskdata[i].Taskid < v.Taskdata[j].Taskid + } + return v.Taskdata[i].Taskstatus > v.Taskdata[j].Taskstatus +} + +func GetTaskConfig(taskid int) *jsonconf.TaskDesc { + for _, val := range jsonconf.GetJsonConf().TaskConfig { + if val.Id == taskid { + return &val + } + } + return nil +} + +func GetAchieveConfig(taskid int) *jsonconf.AchieveDesc { + for _, val := range jsonconf.GetJsonConf().AchieventConfig { + if val.Id == taskid { + return &val + } + } + return nil +} + +func (uinfo *UserData) CalcAchieveProgress(ttype int) int { + rtval := 0 + switch ttype { + case ACHIEVETYPE_GETSCORE: + rtval = int(uinfo.HighScore) + case ACHIEVETYPE_LOGINDAY: + rtval = uinfo.SumLoginDay + case ACHIEVETYPE_WATCHADDS: + rtval = uinfo.Achieve.WatchAdsCnt + case ACHIEVETYPE_KILLLINE: + rtval = uinfo.Achieve.KillStar + default: + logger.Error("CalcAchieveProgress type wrong ttype=%v", ttype) + } + + return rtval +} + +func (uinfo *UserData) CalcAchieveList(list *TaskList, uniqueid string) *TaskList { + newlist := new(TaskList) + curtype := -1 //记录当前类型 + + //第一遍首先将所有进度设置为正确的状态 + for k, val := range list.Taskdata { + cfg := GetAchieveConfig(val.Taskid) + if cfg == nil { + logger.Error("CalcAchieveList GetTaskConfig failed id=%v", val.Taskid) + continue + } + + list.Taskdata[k].Taskprogress = uinfo.CalcAchieveProgress(cfg.Type) + if val.Taskstatus == 1 { + switch cfg.Type { + case ACHIEVETYPE_GETSCORE: + if uinfo.HighScore >= int64(cfg.Aim) { + list.Taskdata[k].Taskstatus = 2 + } + case ACHIEVETYPE_LOGINDAY: + if uinfo.SumLoginDay >= cfg.Aim { + list.Taskdata[k].Taskstatus = 2 + } + case ACHIEVETYPE_KILLLINE: + if uinfo.Achieve.KillStar >= cfg.Aim { + list.Taskdata[k].Taskstatus = 2 + } + case ACHIEVETYPE_WATCHADDS: + if uinfo.Achieve.WatchAdsCnt >= cfg.Aim { + list.Taskdata[k].Taskstatus = 2 + } + + default: + logger.Error("CalcAchieveProgress type wrong ttype=%v", cfg.Type) + } + } + + } + + for k, val := range list.Taskdata { + + cfg := GetAchieveConfig(val.Taskid) + if cfg == nil { + logger.Error("CalcAchieveList GetTaskConfig failed id=%v", val.Taskid) + continue + } + + if val.Taskstatus == 2 { + //未领取已完成 只需要加入第一种 + if curtype == cfg.Type { + continue + } else { + //将类型加入返回列表 + newlist.Taskdata = append(newlist.Taskdata, list.Taskdata[k]) + curtype = cfg.Type + } + } else if val.Taskstatus == 1 { + //未完成 返回第一个 + if curtype == cfg.Type { + continue + } else { + //将类型加入返回列表 + newlist.Taskdata = append(newlist.Taskdata, list.Taskdata[k]) + curtype = cfg.Type + } + } else { + //已领取 需要判断一下是否最后一项 + if k != len(list.Taskdata)-1 { + //不是最后一条数据 + nextcfg := GetAchieveConfig(list.Taskdata[k+1].Taskid) + if nextcfg != nil { + if nextcfg.Type != cfg.Type { + //下面一天不是此类型了 + newlist.Taskdata = append(newlist.Taskdata, list.Taskdata[k]) + curtype = cfg.Type + } + } + + } else { + //最后一条 加入 + newlist.Taskdata = append(newlist.Taskdata, list.Taskdata[k]) + curtype = cfg.Type + } + } + + } + + //保存旧的列表 + SaveTaskInfo(uniqueid, 2, list) + + //将返回的列表排序 + sort.Sort(newlist) + logger.Info("CalcAchieveList alist=%v", newlist) + return newlist +} + +//处理领取任务 +func (uinfo *UserData) HandleGetTaskReward(req *GettaskrewardReq, resp *GettaskrewardResp, list *TaskList, uuid int, gameid, channel string) error { + isfind := false + index := -1 + var taskdesc *TaskListDesc + for k, val := range list.Taskdata { + if val.Taskid == req.Taskid { + isfind = true + index = k + taskdesc = &val + break + } + } + + logger.Info("HandleGetTaskReward index=%v taskdesc=%v", index, taskdesc) + if isfind && taskdesc != nil && index != -1 { + if taskdesc.Taskstatus != 2 { + //状态不是可领取状态 无法领取 + resp.Code = ERROR_TASKCANNOTGET + resp.Message = "当前任务未完成或已领取" + return errors.New("当前任务未完成或已领取") + } + + //状态对的情况 如果是成就下需要判断前置条件是否被 + if req.Tasktype == 2 && index > 0 { + precfg := GetAchieveConfig(list.Taskdata[index-1].Taskid) + nowcfg := GetAchieveConfig(taskdesc.Taskid) + logger.Info("HandleGetTaskRewardGetTaskConfig precfg=%v nowcfg=%v", precfg, nowcfg) + if precfg != nil && nowcfg != nil && precfg.Type == nowcfg.Type && list.Taskdata[index-1].Taskstatus != 0 { + resp.Code = ERROR_TASKPRE_NOTGET + resp.Message = "前置任务还未领取" + return errors.New("当前任务未完成或已领取") + } + } + } else { + resp.Code = ERROR_TASKID_WRONG + resp.Message = "当前任务id错误" + return errors.New("当前任务id错误") + } + + var cfg *jsonconf.AchieveDesc + var cfg1 *jsonconf.TaskDesc + + addgold := 0 + if req.Tasktype == 2 { + cfg = GetAchieveConfig(taskdesc.Taskid) + if cfg == nil { + resp.Code = ERROR_SRV_ERROR + resp.Message = "网络错误" + return errors.New("获取配置失败") + } + addgold = cfg.Coin + } else { + cfg1 = GetTaskConfig(taskdesc.Taskid) + if cfg1 == nil { + resp.Code = ERROR_SRV_ERROR + resp.Message = "网络错误" + return errors.New("获取配置失败") + } + addgold = cfg1.Coin + } + + //将状态置位已领取 + list.Taskdata[index].Taskstatus = 0 + //发奖励 + realgold, err := AddCoinToSdk(uuid, addgold, gameid, channel, REDBAGTYPE_102) + if err != nil { + logger.Info("GetUserInfo HandlerDrawguangold data failed:%v,for:%v", err) + resp.Message = "后台提现失败" + resp.Code = 1 + return errors.New("后台提现失败") + } + + uinfo.RealGold = realgold + resp.Data.Goldnum = addgold + resp.Data.Walletgold = uinfo.RealGold + + return nil +} + +func (uinfo *UserData) CalcTaskList(list *TaskList, uniqueid string) { + + for k, val := range list.Taskdata { + //未完成的才做判断 + if val.Taskstatus != 1 { + continue + } + cfg := GetTaskConfig(val.Taskid) + if cfg == nil { + logger.Error("CalcTaskList GetTaskConfig failed id=%v", val.Taskid) + continue + } + + if cfg.Day_type == DAILY_TASKTYPE_ONLINEMIN { + list.Taskdata[k].Taskprogress = uinfo.Task.OnlineMin + if uinfo.Task.OnlineMin >= cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_COSTTILI { + list.Taskdata[k].Taskprogress = uinfo.Task.CostTili + if uinfo.Task.CostTili >= cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_REACH2000 { + list.Taskdata[k].Taskprogress = uinfo.Task.OutScore + if uinfo.Task.OutScore >= cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_WATCHAD { + list.Taskdata[k].Taskprogress = uinfo.Task.WatchAdCnt + if uinfo.Task.WatchAdCnt >= cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_DRAMTURN { + list.Taskdata[k].Taskprogress = uinfo.Task.DrawTurnTableCnt + if uinfo.Task.DrawTurnTableCnt >= cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_GETLUCKYBAG { + list.Taskdata[k].Taskprogress = uinfo.Task.OpenLuckBagCnt + if uinfo.Task.OpenLuckBagCnt >= cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_USEROCKET { + list.Taskdata[k].Taskprogress = uinfo.Task.UseRocketCnt + if uinfo.Task.UseRocketCnt >= cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_RELIVE { + list.Taskdata[k].Taskprogress = uinfo.Task.RelivegCnt + if uinfo.Task.RelivegCnt > cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } else if cfg.Day_type == DAILY_TASKTYPE_USEITEME { + list.Taskdata[k].Taskprogress = uinfo.Task.UseItemCnt + if uinfo.Task.UseItemCnt > cfg.Aims { + list.Taskdata[k].Taskstatus = 2 + } + } + + } + + //需要保存到redis + SaveTaskInfo(uniqueid, 1, list) + + //排序 + sort.Sort(list) +} + func (u *UserData) IsRedIdInList(id int) bool { for _, v := range u.RedBagFetchIdlist { if v == id { @@ -74,12 +370,17 @@ func (u *UserData) HandlePassDay(uuid int, channel string) { u.GetFromGuanCnt = 0 u.GetCashCnt = 0 - u.Task.GetGuanGold = 0 - u.Task.GetRedbagCnt = 0 - u.Task.OnlineMin = 0 - u.Task.PassLevel = 0 u.Task.UseItemCnt = 0 - u.Task.PlaySmall = 0 + u.Task.CostTili = 0 + u.Task.OnlineMin = 0 + u.Task.DrawTurnTableCnt = 0 + u.Task.HuoYue = 0 + u.Task.OpenLuckBagCnt = 0 + u.Task.OutScore = 0 + u.Task.UseRocketCnt = 0 + u.Task.RelivegCnt = 0 + u.Task.WatchAdCnt = 0 + u.RedBagFetchIdlist = u.RedBagFetchIdlist[:0] u.LuckyBagLeftTimes = LUCKYBAGDAYLIMIT u.FreeTicket = FREETICKETCOUNT diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index e78e3ed..1f39023 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -45,23 +45,27 @@ func startServerHttpServe() { http.HandleFunc("/eliminatestar/addcoin", Addcoin) //测试接口 http.HandleFunc("/eliminatestar/clear", ClearData) //清除账号 //---------------------------------------------------------------------------------------- - http.HandleFunc("/russiaxiaoxiao/login", UserLogin) //登录 - http.HandleFunc("/russiaxiaoxiao/uploaduserbasicinfo", Uploaduserbasicinfo) //上传基本信息 - http.HandleFunc("/russiaxiaoxiao/updatedata", Updatedata) //update数据 - http.HandleFunc("/russiaxiaoxiao/syncuserdata", Syncuserdata) //同步玩家数据 - http.HandleFunc("/russiaxiaoxiao/getguangold", Getguangold) //获取金币存入存钱罐 - http.HandleFunc("/russiaxiaoxiao/drawguangold", Drawguangold) //提取存钱罐金币 - http.HandleFunc("/russiaxiaoxiao/fetchfenredbag", Fetchfenredbag) //请求领取每日消除红包 - http.HandleFunc("/russiaxiaoxiao/fetchluckybag", Fetchluckybag) //请求领取每日福袋 - http.HandleFunc("/russiaxiaoxiao/quersigndata", Quersigndata) //获取签到数据 - http.HandleFunc("/russiaxiaoxiao/dosign", Dosign) //签到 - http.HandleFunc("/russiaxiaoxiao/fetchoffliengold", Fetchoffliengold) //请求领取离线金币 - http.HandleFunc("/russiaxiaoxiao/uploadhigestscore", Uploadhigestscore) //上报玩家历史最高分 - http.HandleFunc("/russiaxiaoxiao/queryrankinfo", Queryrankinfo) //查询排行榜 - http.HandleFunc("/russiaxiaoxiao/querydrawreward", Querydrawreward) //请求抽奖 - http.HandleFunc("/russiaxiaoxiao/querygetcashinfo", Querdrawinfo) //请求提现档位数据 - http.HandleFunc("/russiaxiaoxiao/getcash", Getcash) //请求提现 - http.HandleFunc("/russiaxiaoxiao/getcashrecord", Getcashrecord) //请求提现记录 + http.HandleFunc("/russiaxiaoxiao/login", UserLogin) //登录 + http.HandleFunc("/russiaxiaoxiao/uploaduserbasicinfo", Uploaduserbasicinfo) //上传基本信息 + http.HandleFunc("/russiaxiaoxiao/updatedata", Updatedata) //update数据 + http.HandleFunc("/russiaxiaoxiao/syncuserdata", Syncuserdata) //同步玩家数据 + http.HandleFunc("/russiaxiaoxiao/getguangold", Getguangold) //获取金币存入存钱罐 + http.HandleFunc("/russiaxiaoxiao/drawguangold", Drawguangold) //提取存钱罐金币 + http.HandleFunc("/russiaxiaoxiao/fetchfenredbag", Fetchfenredbag) //请求领取每日消除红包 + http.HandleFunc("/russiaxiaoxiao/fetchluckybag", Fetchluckybag) //请求领取每日福袋 + http.HandleFunc("/russiaxiaoxiao/quersigndata", Quersigndata) //获取签到数据 + http.HandleFunc("/russiaxiaoxiao/dosign", Dosign) //签到 + http.HandleFunc("/russiaxiaoxiao/fetchoffliengold", Fetchoffliengold) //请求领取离线金币 + http.HandleFunc("/russiaxiaoxiao/uploadhigestscore", Uploadhigestscore) //上报玩家历史最高分 + http.HandleFunc("/russiaxiaoxiao/queryrankinfo", Queryrankinfo) //查询排行榜 + http.HandleFunc("/russiaxiaoxiao/querydrawreward", Querydrawreward) //请求抽奖 + http.HandleFunc("/russiaxiaoxiao/querygetcashinfo", Querdrawinfo) //请求提现档位数据 + http.HandleFunc("/russiaxiaoxiao/getcash", Getcash) //请求提现 + http.HandleFunc("/russiaxiaoxiao/getcashrecord", Getcashrecord) //请求提现记录 + http.HandleFunc("/russiaxiaoxiao/onlinentf", Onlinentf) //在线通知 一分钟一次 + http.HandleFunc("/russiaxiaoxiao/updatetaskandachieve", Updatetaskandachieve) //上报任务进度 + http.HandleFunc("/russiaxiaoxiao/querytaskinfo", Querytaskinfo) //查询成就和任务列表 + http.HandleFunc("/russiaxiaoxiao/gettaskreward", Gettaskreward) //查询成就和任务列表 //.......................................... /*http.HandleFunc("/eliminatestar/getuserdata", Getuserdata) //获取玩家数据 @@ -346,86 +350,110 @@ func Getnewlevelreward(w http.ResponseWriter, r *http.Request) { func Gettaskreward(w http.ResponseWriter, r *http.Request) { + gameid := "" + channel := "" + uniqueid := "" Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") } if Uuid == 0 { SetHeader(w) - //logger.Error("Uuid is nil!") + logger.Error("Uuid is nil!") return } result, _ := ioutil.ReadAll(r.Body) r.Body.Close() s := string(result) - logger.Info("Gettaskreward , body:%v,uuid=%v", s, Uuid) + logger.Info("Gettaskreward , body:%v,uuid=%v", s, uniqueid) - //HandlerGettaskreward(w, s, Uuid) + HandlerGettaskreward(w, s, uniqueid, gameid, channel, Uuid) } func Querytaskinfo(w http.ResponseWriter, r *http.Request) { + gameid := "" + channel := "" + uniqueid := "" Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") } if Uuid == 0 { SetHeader(w) - //logger.Error("Uuid is nil!") + logger.Error("Uuid is nil!") return } result, _ := ioutil.ReadAll(r.Body) r.Body.Close() s := string(result) - logger.Info("Querytaskinfo , body:%v,uuid=%v", s, Uuid) + logger.Info("Querytaskinfo , body:%v,uuid=%v", s, uniqueid) - //HandlerQuerytaskinfo(w, s, Uuid) + HandlerQuerytaskinfo(w, s, uniqueid, gameid, channel, Uuid) } func Updatetaskandachieve(w http.ResponseWriter, r *http.Request) { + gameid := "" + channel := "" + uniqueid := "" Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") } if Uuid == 0 { SetHeader(w) - //logger.Error("Uuid is nil!") + logger.Error("Uuid is nil!") return } result, _ := ioutil.ReadAll(r.Body) r.Body.Close() s := string(result) - logger.Info("Updatetaskandachieve , body:%v,uuid=%v", s, Uuid) + logger.Info("Updatetaskandachieve , body:%v,uuid=%v", s, uniqueid) - //HandlerUpdatetaskandachieve(w, s, Uuid) + HandlerUpdatetaskandachieve(w, s, uniqueid, gameid, channel, Uuid) } func Onlinentf(w http.ResponseWriter, r *http.Request) { + gameid := "" + channel := "" + uniqueid := "" Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + gameid = r.Header.Get("Gameid") + channel = r.Header.Get("Channel") + uniqueid = r.Header.Get("Uuid") + r.Header.Get("Channel") } if Uuid == 0 { SetHeader(w) - //logger.Error("Uuid is nil!") + logger.Error("Uuid is nil!") return } result, _ := ioutil.ReadAll(r.Body) r.Body.Close() s := string(result) - logger.Info("Onlinentf , body:%v,uuid=%v", s, Uuid) + logger.Info("Onlinentf , body:%v,uuid=%v", s, uniqueid) - // HandlerOnlinentf(w, s, Uuid) + HandlerOnlinentf(w, s, uniqueid, gameid, channel, Uuid) } func Getcashrecord(w http.ResponseWriter, r *http.Request) { diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index e4bd614..61a94bc 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -120,6 +120,206 @@ func HandlerUploaduserbasicinfo(w http.ResponseWriter, data string, uniqueuuid s fmt.Fprint(w, string(respstr)) } +func HandlerGettaskreward(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp GettaskrewardResp + resp.Code = 0 + var rdata GettaskrewardReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerGettaskreward data failed:%v,for:%v", err, data) + resp.Message = "网络错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil || uinfo == nil { + logger.Error("HandlerGettaskreward redis failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + //需要先计算出任务或者成就 + var tasklist *TaskList + //先查询一下当前的任务数据 + tasklist, err = GetTaskInfo(uuid, rdata.Tasktype, channel) + if err != nil || tasklist == nil { + logger.Error("GetTaskInfo failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + err = uinfo.HandleGetTaskReward(&rdata, &resp, tasklist, uuid, gameid, channel) + logger.Info("HandlerGettaskreward tasklist=%v", tasklist) + logger.Info("HandlerGettaskreward uinfo=%v", uinfo) + if err != nil { + logger.Error("HandleGetTaskReward failed err=%v", err) + resp.Message = "奖励已经领取" + resp.Code = ERROR_SRV_ERROR + break + } + + //保存数据 + err = SaveUserInfo(uinfo, uniqueuuid) + err = SaveTaskInfo(uniqueuuid, rdata.Tasktype, tasklist) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerQuerytaskinfo(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp QuerytaskinfoResp + resp.Code = 0 + var rdata QuerytaskinfoReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Info("json decode HandlerQuerytaskinfo data failed:%v,for:%v", err, data) + resp.Message = "网络错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil || uinfo == nil { + logger.Error("HandlerQuerytaskinfo redis failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + uinfo.HandlePassDay(uuid, channel) + + //需要先计算出任务或者成就 + var tasklist *TaskList + //先查询一下当前的任务数据 + tasklist, err = GetTaskInfo(uuid, rdata.Tasktype, channel) + if err != nil || tasklist == nil { + logger.Error("HandlerQuerytaskinfo redis failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + if rdata.Tasktype == 1 { + uinfo.CalcTaskList(tasklist, uniqueuuid) + } else if rdata.Tasktype == 2 { + tasklist = uinfo.CalcAchieveList(tasklist, uniqueuuid) + } else { + uinfo.CalcTaskList(tasklist, uniqueuuid) + } + + if tasklist == nil { + logger.Error("redis failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + resp.Data.Taskdata = append(resp.Data.Taskdata, tasklist.Taskdata...) + + resp.Code = ERROR_OK + break + } + + //回包 + logger.Info("HandlerQuerytaskinfo,uuid=%v resp=%v", uuid, resp) + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerUpdatetaskandachieve(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp UpdatetaskResp + resp.Code = 0 + var rdata UpdatetaskReq + err := json.Unmarshal([]byte(data), &rdata) + for { + + if err != nil { + logger.Info("json decode HandlerUpdatetaskandachieve data failed:%v,for:%v", err, data) + resp.Message = "json解析错误" + resp.Code = ERROR_JSONUNMASH_ERROR + break + } + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil || uinfo == nil { + logger.Error("HandlerUpdatetaskandachieve redis failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + switch rdata.Tasktype { + case TASKTYPE_COSTTILI: + uinfo.Task.CostTili += rdata.Value + case TASKTYPE_REACH2000: + uinfo.Task.OutScore += rdata.Value + case TASKTYPE_WATCHADS: + uinfo.Achieve.WatchAdsCnt += rdata.Value + uinfo.Task.WatchAdCnt += rdata.Value + case TASKTYPE_TURNTABLE: + uinfo.Task.DrawTurnTableCnt += rdata.Value + case TASKTYPE_LUCKYBAG: + uinfo.Task.OpenLuckBagCnt += rdata.Value + case TASKTYPE_ROCKETTIMES: + uinfo.Task.UseRocketCnt += rdata.Value + case TASKTYPE_RELIVECNT: + uinfo.Task.RelivegCnt += rdata.Value + case TASKTYPE_USEITEMTIMES: + uinfo.Task.UseItemCnt += rdata.Value + case ACHIEVE_KILLLINE: + uinfo.Achieve.KillStar += rdata.Value + } + logger.Info("HandlerUpdatetaskandachieve uinfo=%v rdata=%v", uinfo, rdata) + SaveUserInfo(uinfo, uniqueuuid) + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlerOnlinentf(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { + SetHeader(w) + var resp OnlinentfResp + resp.Code = 0 + resp.Message = "success" + for { + + uinfo, err := GetUserInfo(uniqueuuid) + if err != nil || uinfo == nil { + logger.Error("redis failed err=%v", err) + resp.Message = "服务器错误" + resp.Code = ERROR_SRV_ERROR + break + } + + uinfo.Task.OnlineMin++ + + SaveUserInfo(uinfo, uniqueuuid) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + func HandlerGetcashrecord(w http.ResponseWriter, data string, uniqueuuid, gameid, channel string, uuid int) { SetHeader(w) var resp GetcashrecordResp -- libgit2 0.21.0