From ca57fc775f1575cbdb0f4e8e725d8e1cf96677e4 Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Sat, 9 May 2020 10:43:31 +0800 Subject: [PATCH] 提交接口 --- src/HttpServer/logic/datadef.go | 28 ++++++++++++++++++++++++++++ src/HttpServer/logic/errordef.go | 1 + src/HttpServer/logic/httpserver.go | 28 ++++++++++++++++++++++++++++ src/HttpServer/logic/logic.go | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/common/redis/def.go | 1 + src/mysql/dbmysql.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 202 insertions(+), 0 deletions(-) diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 1a2a246..b30cd26 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -88,6 +88,34 @@ type UserLoginResp struct { } +type QueryInviteReq struct{ + Uuid int `json:"uuid"` +} + +type QueryInviteData struct { + Uuid int `json:"uuid"` + Nickname string `json:"nickname"` + Isfetched int `json:"isfetched"` +} + +type QueryInviteResp struct { + Code int `json:"code"` + Message string `json:"message"` + Data []QueryInviteData `json:"data"` +} + +type FetchInviteReq struct{ + Selfuuid int `json:"selfuuid"` + Fuuid int `json:"fuuid"` +} + + +type FetchInviteResp struct { + Code int `json:"code"` + Message string `json:"message"` +} + + type RegeisterReq struct{ Account string `json:"account"` Password string `json:"password"` diff --git a/src/HttpServer/logic/errordef.go b/src/HttpServer/logic/errordef.go index d7dbe84..e5cf885 100644 --- a/src/HttpServer/logic/errordef.go +++ b/src/HttpServer/logic/errordef.go @@ -39,4 +39,5 @@ const ( ERROR_REGEISTACCOUNTEXIST = 34 //注册账号重复 ERROR_ACCOUNTPWDWRONG= 35 //账号登录密码不对 ERROR_TEAMISMAX= 36 //队伍人数已满 + ERROR_INVITEREAWARD_FETCHED= 37 //邀请奖励已经领取 ) \ No newline at end of file diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index 8d902e9..7e99418 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -69,6 +69,10 @@ func startServerHttpServe() { http.HandleFunc("/catcafe/friend/delFriend", DelFriend) //删除好友 http.HandleFunc("/catcafe/friend/QueryPlayerData", QueryPlayerData) //根据用户id获取用户信息 好友用 + //................................................................................................................... + http.HandleFunc("/catcafe/user/queryInvite", QueryInvite) //查询玩家对应邀请关系 + http.HandleFunc("/catcafe/user/fetchInviteReward",FetchInviteReward) //领取邀请奖励 + err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) @@ -207,6 +211,30 @@ func ClearData(w http.ResponseWriter, r *http.Request) { //HandleRegeister(w,s) } +func FetchInviteReward(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("FetchInviteReward , body:%v,uuid=%v", s) + + HandleFetchInviteReward(w,s) + +} + +func QueryInvite(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("QueryInvite , body:%v,uuid=%v", s) + + HandleQueryInvite(w,s) + +} + func Regeister(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 7497409..41c3779 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -8,6 +8,7 @@ import ( "common/redis" ksuid "github.com/segmentio" "io/ioutil" + "mysql" "strconv" "encoding/json" @@ -231,6 +232,91 @@ func TransmitUserData(in *UserData ,out *UserExtData) { out.Invite_uid = in.InviteUid } + +func HandleQueryInvite(w http.ResponseWriter, data string) { + + SetHeader(w) + var resp QueryInviteResp + resp.Code = 0 + var rdata QueryInviteReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleQueryInvite json unmarshal failed=%v", err) + resp.Code = ERROR_JSONUNMASHFAILED + resp.Message = "json unmarshal failed" + break + } + + inlist,err := mysql.QueryInvite(rdata.Uuid) + if err != nil { + logger.Error("HandleQueryInvite QueryInvite failed=%v", err) + resp.Code = ERROR_JSONUNMASHFAILED + resp.Message = "QueryInvite failed" + break + } + + for _,val := range inlist { + var tmp QueryInviteData + tmp.Uuid = val.Uuid + tmp.Nickname = val.NickName + tmp.Isfetched = val.IsFecthed + resp.Data = append(resp.Data,tmp) + } + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandleFetchInviteReward(w http.ResponseWriter, data string) { + + SetHeader(w) + var resp FetchInviteResp + resp.Code = 0 + var rdata FetchInviteReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleFetchInviteReward json unmarshal failed=%v", err) + resp.Code = ERROR_JSONUNMASHFAILED + resp.Message = "json unmarshal failed" + break + } + + rkey := redis.USER_INVITEREWARD_FETCH_REWARD + ":" + strconv.Itoa(rdata.Selfuuid) + isexist,err := redishandler.GetRedisClient().HExists(rkey,strconv.Itoa(rdata.Fuuid)) + if err != nil { + logger.Error("HandleFetchInviteReward redis failed=%v", err) + resp.Code = ERROR_JSONUNMASHFAILED + resp.Message = fmt.Sprintf("%s",err) + break + } + + if isexist { + logger.Error("HandleFetchInviteReward alreadyfetched failed=%v", err) + resp.Code = ERROR_INVITEREAWARD_FETCHED + resp.Message = "already fetched" + break + } + + //将领取记录记录 + redishandler.GetRedisClient().HSet(rkey,strconv.Itoa(rdata.Fuuid),strconv.Itoa(rdata.Fuuid)) + + resp.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + + func HandleRegeister(w http.ResponseWriter, data string) { SetHeader(w) diff --git a/src/common/redis/def.go b/src/common/redis/def.go index 44e4f5e..8abc1c3 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -16,4 +16,5 @@ const ( FRIEND_APPROVELIST_KEY = "CATCAFE_FRIEND_APPROVELIST_KEY" //待批准好友列表,需要在末尾加死":uuid" FRIEND_RECOMMANDLIST_KEY = "CATCAFE_FRIEND_RECOMMANDLIST_KEY" //推荐好友缓存key USER_ACCOUNT_PASSWORD_KEY = "CATCAFE_USER_ACCOUNT_PASSWORD_KEY" //玩家账号密码的key + USER_INVITEREWARD_FETCH_REWARD = "CATCAFE_USER_INVITEREWARD_FETCH_REWARD" //玩家邀请奖励领取状况 hset ) diff --git a/src/mysql/dbmysql.go b/src/mysql/dbmysql.go index cf3f86a..12156ab 100644 --- a/src/mysql/dbmysql.go +++ b/src/mysql/dbmysql.go @@ -2,7 +2,9 @@ package mysql import ( "HttpServer/conf" + "HttpServer/redishandler" "common/logger" + "common/redis" "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" @@ -15,6 +17,12 @@ var ( m_game_db *sql.DB ) +type QuerInviteDesc struct { + Uuid int + NickName string + IsFecthed int +} + func InitMysql() error { db, err := InitMysqlByConf(conf.GetGameDBConf()) if err != nil { @@ -138,4 +146,54 @@ func QueryAllData(f *os.File) error{ } return nil +} + + +func QueryInvite(uuid int) ([]QuerInviteDesc,error){ + var rtslice []QuerInviteDesc + for i:=0;i<10;i++ { + tablename := "b_user_ext_0" + strconv.Itoa(i) + cmd := "SELECT user_id,nickname, from " + tablename + " where invite_uid= " + strconv.Itoa(uuid) + rows, err := m_game_db.Query(cmd) + defer func() { + if rows != nil { + rows.Close() //可以关闭掉未scan连接一直占用 + } + }() + + if err != nil { + logger.Error("Query failed,err:%v", err) + continue + } + for rows.Next() { + var tmp QuerInviteDesc + err = rows.Scan(&tmp.Uuid, &tmp.NickName) //不scan会导致连接不释放 + if err != nil { + logger.Error("Scan failed,err:%v", err) + continue + } + + tmp.IsFecthed = 0 + rtslice = append(rtslice,tmp) + } + } + + //需要查询一下当前领取状态 + rkey := redis.USER_INVITEREWARD_FETCH_REWARD + ":" + strconv.Itoa(uuid) + for k,val := range rtslice{ + isexist,err := redishandler.GetRedisClient().HExists(rkey,strconv.Itoa(val.Uuid)) + if err != nil { + logger.Error("USER_INVITEREWARD_FETCH_REWARD failed err=%v",err) + rtslice[k].IsFecthed = 1 + continue + } + + if isexist { + //已经存在 + rtslice[k].IsFecthed = 1 + } + } + + + return rtslice,nil } \ No newline at end of file -- libgit2 0.21.0