From 328b6d0f6bc3bf22755ff82f4ec98ad89023d5d0 Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Mon, 20 Apr 2020 16:44:03 +0800 Subject: [PATCH] 队伍相关接口 --- src/HttpServer/logic/datadef.go | 36 ++++++++++++++++++++++++++++++++++++ src/HttpServer/logic/errordef.go | 6 ++++++ src/HttpServer/logic/function.go | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/HttpServer/logic/httpserver.go | 24 ++++++++++++++++++++++++ src/HttpServer/logic/logic.go | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/common/redis/def.go | 4 ++++ 6 files changed, 313 insertions(+), 3 deletions(-) diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 8837afc..e8d56a0 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -150,6 +150,42 @@ type GetAccessTokenResp struct { } +type CreateTeamReq struct{ + Token string `json:"token"` + Name string `json:"name"` + Is_open int `json:"is_open"` + Limit int `json:"limit"` +} + +type CreateTeamInfo struct { + Id int `json:"id"` + Name string `json:"name"` + Is_open int `json:"is_open"` + Num int `json:"num"` + Assets int `json:"assets"` + Least int `json:"least"` + Captain_id int `json:"captain_id"` + Creator_id int `json:"creator_id"` + Status int `json:"status"` + Create_time int `json:"create_time"` + Update_time int `json:"update_time"` + +} +type CreateTeamDesc struct { + Team_data CreateTeamInfo `json:"team_data"` +} + +type CreateTeamData struct { + Code int `json:"code"` + Data CreateTeamDesc `json:"data"` +} + +type CreateTeamResp struct { + Status string `json:"status"` + Result CreateTeamData `json:"result"` +} + + //********************************************************************************************************** diff --git a/src/HttpServer/logic/errordef.go b/src/HttpServer/logic/errordef.go index 0359fac..17e6219 100644 --- a/src/HttpServer/logic/errordef.go +++ b/src/HttpServer/logic/errordef.go @@ -10,4 +10,10 @@ const ( ERROR_GETUSERMAPBYUIDFAILED = 5 //从玩家在线数据获取失败 ERROR_SRVDB_FAILED = 6 //服務器存储数据失败或者读取失败 ERROR_HTTPPOSTFAILED = 7 //http请求失败 + ERROR_TEAM_ALREADYEXIST = 8 //队伍名称已经存在 + ERROR_CREATE_SHOPNOTENOUGH = 9 //创建队伍店铺数量不够 + ERROR_QUERYTEAMID_FAILED = 10 //查询队伍id失败 + ERROR_GETTEAMINFO_FAILED = 11 //查询队伍信息失败 + ERROR_NOTCAPTION = 12 //不是队长无法修改队伍信息 + ERROR_TEAMNAMETHSDAME = 13 //修改队伍时名称重复 ) \ No newline at end of file diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index f4281f1..9695d3e 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -36,7 +36,7 @@ func GetTouristUid(utoken string) (int,error){ return uid,err } -//获取新的uuid +//获取玩家新的uuid func GetNewUUid() int { redishandler.GetRedisClient().Incr(redis.USER_MAX_UUID) newuuid ,err:= redishandler.GetRedisClient().GetInt(redis.USER_MAX_UUID) @@ -45,7 +45,19 @@ func GetNewUUid() int { return 0 } - return newuuid+10000 + return newuuid+100000 +} + +//获取新的teamid +func GetNewTeamId() int { + redishandler.GetRedisClient().Incr(redis.TEAM_MAX_UUID) + newuuid ,err:= redishandler.GetRedisClient().GetInt(redis.TEAM_MAX_UUID) + if err != nil { + logger.Error("GetNewUUid failed,err=%v",err) + return 0 + } + + return newuuid+100000 } func SaveUserBaseData(uuid int,value string) error { @@ -101,4 +113,76 @@ func GetUserExt(uuid int) (*UserExtData,error) { ext := new(UserExtData) err = json.Unmarshal([]byte(strval), ext) return ext,err +} + +//检测队伍名称是否已经存在 +func GetUserTeamNameIsExist(name string) bool { + _,err := redishandler.GetRedisClient().HGet(redis.TEAM_USERTEAM_NAME, name) + if err != nil { + return true + } + return false +} + +//删除存储的队伍名称 +func DelUserTeamName(name string) error{ + err := redishandler.GetRedisClient().HDel(redis.TEAM_USERTEAM_NAME, name) + if err != nil { + logger.Error("SetUserTeamName err=%v),err") + } + return err +} + +//存储队伍名称 +func SetUserTeamName(name string,teamid int) { + err := redishandler.GetRedisClient().HSet(redis.TEAM_USERTEAM_NAME, name, strconv.Itoa(teamid)) + if err != nil { + logger.Error("SetUserTeamName err=%v),err") + } +} + +//保存队伍信息 +func SaveTeamInfo(teamid int,tinfo *CreateTeamInfo) error { + team,_ := json.Marshal(tinfo) + err := redishandler.GetRedisClient().HSet(redis.TEAM_INFO, strconv.Itoa(teamid), string(team)) + if err != nil { + logger.Error("SaveTeamInfo err=%v),err") + return err + } + return nil +} + +//获取队伍信息 +func GetTeamInfo(teamid int) (*CreateTeamInfo,error) { + info := new(CreateTeamInfo) + vv,err := redishandler.GetRedisClient().HGet(redis.TEAM_INFO,strconv.Itoa(teamid)) + if err != nil { + logger.Error("GetTeamInfo failed,err=%v",err) + return nil,err + } + + err = json.Unmarshal([]byte(vv), info) + return info,err +} + +//保存teamid与uuid +func SaveTeamToUuid(teamid,uuid int) error { + err := redishandler.GetRedisClient().HSet(redis.TEAM_TEAMID_TOUUID, strconv.Itoa(uuid), strconv.Itoa(teamid)) + if err != nil { + logger.Error("SaveTeamToUuid err=%v),err") + return err + } + return nil +} + +//获取teamid与uuid +func GetTeamByUuid(uuid int) (int,error) { + vv,err := redishandler.GetRedisClient().HGet(redis.TEAM_TEAMID_TOUUID,strconv.Itoa(uuid)) + if err != nil { + logger.Error("GetTeamByUuid failed,err=%v",err) + return 0,err + } + + teamid,err := strconv.Atoi(vv) + return teamid,err } \ No newline at end of file diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index 195510c..d4fc121 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -34,12 +34,36 @@ func startServerHttpServe() { http.HandleFunc("/catcafe/data/saveData", SaveData) //保存游戏自定义数据 http.HandleFunc("/catcafe/data/getData", GetData) //获取自定义数据 http.HandleFunc("/catcafe/team/textCheck", TextCheck) //敏感词检测 + http.HandleFunc("/catcafe/team/createTeam", CreateTeam) //创建队伍 + http.HandleFunc("/catcafe/team/updateTeamData", UpdateTeamData) //修改队伍信息 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } +func UpdateTeamData(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("UpdateTeamData , body:%v,uuid=%v", s) + + HandleUpdateTeamData(w,s) +} + +func CreateTeam(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("CreateTeam , body:%v,uuid=%v", s) + + HandleCreateTeam(w,s) +} + func TextCheck(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 19a45c5..4112a9f 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -398,4 +398,160 @@ func HandleTextCheck(w http.ResponseWriter, data string) { //回包 respstr, _ := json.Marshal(&resp) fmt.Fprint(w, string(respstr)) -} \ No newline at end of file +} + +func HandleCreateTeam(w http.ResponseWriter, data string) { + SetHeader(w) + var resp CreateTeamResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata CreateTeamReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleCreateTeam json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandleCreateTeam GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + + //首先判断一下当前队伍名称是否已经存在 + isexist := GetUserTeamNameIsExist(rdata.Name) + if isexist { + logger.Error("HandleCreateTeam name mulit failed=%v", err) + resp.Result.Code = ERROR_TEAM_ALREADYEXIST + break + } + + /*//判断店铺数量 + vv := m_userInfo.Get(uint32(uuid)) + if vv == nil { + logger.Error("HandleCreateTeam failed=%v", err) + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED + break + } + + uinfo := vv.(*UserData) + if uinfo.Shopnum < rdata.Limit { + logger.Error("HandleCreateTeam failed=%v", err) + resp.Result.Code = ERROR_CREATE_SHOPNOTENOUGH + break + }*/ + + //初始化队伍数据 + var teaminfo CreateTeamInfo + teaminfo.Name = rdata.Name + teaminfo.Status = 0 + teaminfo.Id = GetNewTeamId() + teaminfo.Assets = 0 + teaminfo.Captain_id = uuid + teaminfo.Creator_id = uuid + teaminfo.Create_time = int(time.Now().Unix()) + teaminfo.Is_open = rdata.Is_open + teaminfo.Least = rdata.Limit + teaminfo.Num = 1 + teaminfo.Update_time = int(time.Now().Unix()) + resp.Result.Data.Team_data = teaminfo + + //保存队伍数据 + SaveTeamInfo(teaminfo.Id,&teaminfo) + + //保存队伍id + SaveTeamToUuid(teaminfo.Id,uuid) + + //保存队伍名称 + SetUserTeamName(rdata.Name,teaminfo.Id) + + resp.Result.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandleUpdateTeamData(w http.ResponseWriter, data string) { + SetHeader(w) + var resp SaveDataResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata CreateTeamReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleUpdateTeamData json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandleUpdateTeamData GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + + //首先判断一下当前队伍名称是否已经存在 + isexist := GetUserTeamNameIsExist(rdata.Name) + if isexist { + logger.Error("HandleUpdateTeamData name mulit failed=%v", err) + resp.Result.Code = ERROR_TEAM_ALREADYEXIST + break + } + + //首先查询teamid + teamid,err := GetTeamByUuid(uuid) + if err != nil { + logger.Error("HandleUpdateTeamData getteamid failed=%v", err) + resp.Result.Code = ERROR_QUERYTEAMID_FAILED + break + } + //查询队伍数据 + teaminfo,err := GetTeamInfo(teamid) + if err != nil { + logger.Error("HandleUpdateTeamData getteaminfo failed=%v", err) + resp.Result.Code = ERROR_GETTEAMINFO_FAILED + break + } + + if teaminfo.Captain_id != uuid { + logger.Error("HandleUpdateTeamData notcaption failed=%v", err) + resp.Result.Code = ERROR_NOTCAPTION + break + } + if teaminfo.Name == rdata.Name { + logger.Error("HandleUpdateTeamData namesame failed=%v", err) + resp.Result.Code = ERROR_TEAMNAMETHSDAME + break + } + + orinname := teaminfo.Name + teaminfo.Name = rdata.Name + teaminfo.Is_open = rdata.Is_open + teaminfo.Least = rdata.Limit + teaminfo.Update_time = int(time.Now().Unix()) + + //保存队伍数据 + SaveTeamInfo(teaminfo.Id,teaminfo) + + DelUserTeamName(orinname) + //保存队伍名称 + SetUserTeamName(rdata.Name,teaminfo.Id) + + resp.Result.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} diff --git a/src/common/redis/def.go b/src/common/redis/def.go index b402575..e9e2db5 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -7,4 +7,8 @@ const ( USER_EXT_DATA = "CATCAFE_USER_EXT_DATA" //玩家游戏数据 USER_BASE_DATA = "CATCAFE_USER_BASE_DATA" //小游戏自定义数据 MSG_CKECK_ACCESSTOKEN = "CATCAFE_MSG_CKECK_ACCESSTOKEN" //敏感词检测的key + TEAM_USERTEAM_NAME = "CATCAFE_TEAM_USERTEAM_NAME" //存储了玩家队伍名称 + TEAM_INFO = "CATCAFE_TEAM_INFO" //存储了玩家队伍信息 + TEAM_MAX_UUID = "CATCAFE_TEAM_MAX_UUID" //记录当前最大的teamid,新增自增即可 + TEAM_TEAMID_TOUUID = "CATCAFE_TEAM_TEAMID_TOUUID" //记录teamid与uuid的关系 ) -- libgit2 0.21.0