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 = "ERROR_SRV_ERROR" resp.Code = ERROR_SRV_ERROR break } //获取存钱罐等级配置 mcfg := jsonconf.GetMoneyBoxCfg(uinfo.Lv) if mcfg==nil { logger.Error("GetMoneyBoxCfg failed err=%v", err) resp.Message = "ERROR_GETCONFIG_FAILED" resp.Code = ERROR_GETCONFIG_FAILED break } resp.Guangold = uinfo.GuanGold resp.Loginday = uinfo.ContinueLoginDay resp.Totalcnt = uinfo.CalcTotalCnt() resp.Leftcnt = resp.Totalcnt - uinfo.GetFromGuanCnt resp.Maxget = mcfg.Max resp.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 = "ERROR_SRV_ERROR" resp.Code = ERROR_SRV_ERROR break } if uinfo.WatchAddsTime == 0 { logger.Error("WatchAddsTime zero") resp.Message = "WatchAddsTime zero" resp.Code = ERROR_WATCHADS_ZEOR break } uinfo.WatchAddsTime -- err = SaveUserInfo(uinfo) if err != nil { logger.Error("redis failed err=%v", err) resp.Message = "ERROR_SRV_ERROR" 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 unmarshal failed" resp.Code = ERROR_JSONUNMASH_ERROR break } uinfo,err := GetUserInfo(uuid) if err != nil || uinfo == nil{ logger.Error("redis failed err=%v", err) resp.Message = "ERROR_SRV_ERROR" resp.Code = ERROR_SRV_ERROR break } //首先判断一下存钱罐的金币是否足够 if rdata.Goldnum < uinfo.GuanGold { logger.Error("guangold not enough ") resp.Message = "ERROR_SRV_ERROR" 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 = "ERROR_GETCONFIG_FAILED" resp.Code = ERROR_GETCONFIG_FAILED break } if rdata.Goldnum < mcfg.Min || rdata.Goldnum > mcfg.Max { logger.Error("GetMoneyBoxCfg failed err=%v", err) resp.Message = "ERROR_DRAWGUAN_FAILED" resp.Code = ERROR_DRAWGUAN_FAILED break } uinfo.GuanGold = uinfo.GuanGold - rdata.Goldnum uinfo.RealGold += rdata.Goldnum //todo 此处需要调佣SDK接口通知金币变化 resp.Guangold = uinfo.GuanGold resp.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 unmarshal failed" resp.Code = ERROR_JSONUNMASH_ERROR break } uinfo,err := GetUserInfo(uuid) if err != nil || uinfo == nil{ logger.Error("redis failed err=%v", err) resp.Message = "ERROR_SRV_ERROR" resp.Code = ERROR_SRV_ERROR break } mcfg := jsonconf.GetMoneyBoxCfg(uinfo.Lv) if mcfg==nil { logger.Error("GetMoneyBoxCfg failed err=%v", err) resp.Message = "ERROR_GETCONFIG_FAILED" resp.Code = ERROR_GETCONFIG_FAILED break } uinfo.GuanGold += rdata.Goldnum if uinfo.GuanGold >= mcfg.Max { uinfo.GuanGold = mcfg.Max } resp.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 unmarshal failed" 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 = "ERROR_SRV_ERROR" 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 = "ERROR_SRV_ERROR" 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)) }