logic.go 6.19 KB
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))
}