package logic import ( "HttpServer/jsonconf" "HttpServer/redishandler" "common/logger" "common/redis" "encoding/json" "fmt" "net/http" "strconv" ) func HandlerQueryguaninfo(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp QueryguaninfoResp resp.Code = 0 for { uinfo,err := GetUserInfo(uuid) if err != nil || uinfo == nil{ logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" resp.Code = ERROR_SRV_ERROR break } //获取存钱罐等级配置 mcfg := jsonconf.GetMoneyBoxCfg(uinfo.Lv) if mcfg==nil { logger.Error("GetMoneyBoxCfg failed err=%v", err) resp.Message = "存钱罐金币不足" resp.Code = ERROR_GETCONFIG_FAILED break } resp.Data.Guangold = uinfo.GuanGold resp.Data.Loginday = uinfo.ContinueLoginDay resp.Data.Totalcnt = uinfo.CalcTotalCnt() resp.Data.Leftcnt = resp.Data.Totalcnt - uinfo.GetFromGuanCnt resp.Data.Maxget = mcfg.Max resp.Data.Minget = mcfg.Min resp.Code = ERROR_OK break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerWatchads(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp WatchadsResp resp.Code = 0 for { uinfo,err := GetUserInfo(uuid) if err != nil || uinfo == nil{ logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" resp.Code = ERROR_SRV_ERROR break } if uinfo.WatchAddsTime == 0 { logger.Error("WatchAddsTime zero") resp.Message = "看视频次数已经耗尽" resp.Code = ERROR_WATCHADS_ZEOR break } uinfo.WatchAddsTime -- err = SaveUserInfo(uinfo) if err != nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" resp.Code = ERROR_SRV_ERROR break } resp.Code = ERROR_OK break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerDrawguangold(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp DrawguangoldResp resp.Code = 0 var rdata DrawguangoldReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerDrawguangold data failed:%v,for:%v", err, data) resp.Message = "json解析错误" resp.Code = ERROR_JSONUNMASH_ERROR break } uinfo,err := GetUserInfo(uuid) if err != nil || uinfo == nil{ logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" resp.Code = ERROR_SRV_ERROR break } //首先判断一下存钱罐的金币是否足够 if rdata.Goldnum > uinfo.GuanGold { logger.Error("guangold not enough rdata.Goldnum=%v uinfo.GuanGold=%v",rdata.Goldnum,uinfo.GuanGold) resp.Message = "存钱罐金币不足" resp.Code = ERROR_GUANGOLD_NOTENOUGH break } //判断一下是否满足提取条件 totalcnt := uinfo.CalcTotalCnt() if totalcnt <= uinfo.GetFromGuanCnt { logger.Error("guangold not enough ") resp.Message = "ERROR_SRV_ERROR" resp.Code = ERROR_GUANGOLD_NOTENOUGH break } uinfo.GetFromGuanCnt ++ // mcfg := jsonconf.GetMoneyBoxCfg(uinfo.Lv) if mcfg==nil { logger.Error("GetMoneyBoxCfg failed err=%v", err) resp.Message = "获取配置失败" resp.Code = ERROR_GETCONFIG_FAILED break } if rdata.Goldnum < mcfg.Min || rdata.Goldnum > mcfg.Max { logger.Error("GetMoneyBoxCfg failed err=%v", err) resp.Message = "从存钱罐提取金币不满足限制" resp.Code = ERROR_DRAWGUAN_FAILED break } //todo 此处需要调佣SDK接口通知金币变化 realnum,err := AddCoinToSdk(uuid,rdata.Goldnum,rdata.Gameid,rdata.Channel,100) if err != nil { logger.Error("Drawgold failed err=%v", err) resp.Message = "从存钱罐提取金币失败了" resp.Code = ERROR_DRAWGOLD_FAILED break } uinfo.GuanGold = uinfo.GuanGold - rdata.Goldnum uinfo.RealGold = realnum resp.Data.Guangold = uinfo.GuanGold resp.Data.Wallgold = uinfo.RealGold SaveUserInfo(uinfo) resp.Code = ERROR_OK break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerGetguangold(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp GetguangoldResp resp.Code = 0 var rdata GetguangoldReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerGetguangold data failed:%v,for:%v", err, data) resp.Message = "json解析错误" resp.Code = ERROR_JSONUNMASH_ERROR break } uinfo,err := GetUserInfo(uuid) if err != nil || uinfo == nil{ logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" resp.Code = ERROR_SRV_ERROR break } mcfg := jsonconf.GetMoneyBoxCfg(uinfo.Lv) if mcfg==nil { logger.Error("GetMoneyBoxCfg failed err=%v", err) resp.Message = "获取配置失败" resp.Code = ERROR_GETCONFIG_FAILED break } uinfo.GuanGold += rdata.Goldnum if uinfo.GuanGold >= mcfg.Max { uinfo.GuanGold = mcfg.Max } resp.Data.Guangold = uinfo.GuanGold SaveUserInfo(uinfo) resp.Code = ERROR_OK break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) } func HandlerLogin(w http.ResponseWriter, data string, uuid int) { SetHeader(w) var resp UserLoginResp resp.Code = 0 var rdata UserLoginReq err := json.Unmarshal([]byte(data), &rdata) for { if err != nil { logger.Info("json decode HandlerLogin data failed:%v,for:%v", err, data) resp.Message = "json解析错误" resp.Code = ERROR_JSONUNMASH_ERROR break } //先判断一下是否是新用户 isexist,err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, strconv.Itoa(uuid)) if err != nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" resp.Code = ERROR_SRV_ERROR break } if !isexist { //不存在 //属于新登录的玩家数据 err = InitUserInfo(&rdata, &resp, uuid) } else { //已经登陆过了 需要获取玩家数据 err = GetUserData(uuid, &resp) } if err != nil { logger.Error("redis failed err=%v", err) resp.Message = "服务器错误" resp.Code = ERROR_SRV_ERROR break } resp.Code = ERROR_OK break } //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) logger.Info("###HandlerLogin###rdata:%v", string(respstr)) }