From 95bfb593832f01fabb6c327f991bd2d9a4b4343a Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Wed, 10 Jun 2020 10:07:40 +0800 Subject: [PATCH] 提交登录接口 --- src/HttpServer/jsonconf/jsonconf.go | 8 ++++++++ src/HttpServer/logic/datadef.go | 29 +++++++++++++++-------------- src/HttpServer/logic/function.go | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/HttpServer/logic/httpserver.go | 70 ++++++++++++++++++++++++++++++++++++---------------------------------- src/HttpServer/logic/logic.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- src/common/redis/def.go | 17 ++++++++--------- 6 files changed, 243 insertions(+), 60 deletions(-) create mode 100644 src/HttpServer/logic/function.go diff --git a/src/HttpServer/jsonconf/jsonconf.go b/src/HttpServer/jsonconf/jsonconf.go index 7dc5efe..0b54193 100644 --- a/src/HttpServer/jsonconf/jsonconf.go +++ b/src/HttpServer/jsonconf/jsonconf.go @@ -61,6 +61,14 @@ func GetJsonConf() *GameConfig { return g_jsonconf } +func GetCatConfig(lv int) *CatDesc { + for _, v := range g_jsonconf.CatConfig { + if v.Id == lv { + return &v + } + } + return nil +} func file_get_contents(path string) ([]byte, error) { diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 33aa992..6b338dc 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -1,25 +1,24 @@ package logic -type UserLoginData struct { - //Uuid int `json:"uuid"` +type UserLoginReq struct { + Lype int `json:"type"` + UserId int `json:"userId"` Fromid int `json:"fromid"` - Sharetype int `json:"sharetype"` + +} + +type UserLoginData struct { + UserId string `json:"userId"` + AccessToken string `json:"accessToken"` + LoginType int `json:"loginType"` + Nickname string `json:"nickname"` + HeadImg string `json:"headImg"` } type UserLoginResp struct { Code int `json:"code"` + Data UserLoginData `json:"data"` Message string `json:"message"` - Gold int64 `json:"gold"` - Love int64 `json:"love"` - Goldrate int64 `json:"goldrate"` - Loverate int64 `json:"loverate"` - Highestlv int `json:"highestlv"` - Curboxlv int `json:"curboxlv"` - Isdoublegold int `json:"isdoublegold"` - Isauto int `json:"isauto"` - Offlinegold int64 `json:"offlinegold"` - Offlinelove int64 `json:"offlinelove"` - Data []DataDesc `json:"data"` } type GetUserDataReq struct { @@ -403,6 +402,8 @@ type AchieveMentData struct { //玩家数据 type UserData struct { + UserId int //玩家id + RegTime int //注册时间 Gold int64 //金币 Love int64 //爱心值 Goldrate int64 //金币生成速率 diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go new file mode 100644 index 0000000..4e25e53 --- /dev/null +++ b/src/HttpServer/logic/function.go @@ -0,0 +1,116 @@ +package logic + +import ( + "HttpServer/jsonconf" + "HttpServer/redishandler" + "common/logger" + "common/redis" + "encoding/json" + "strconv" + "time" +) + +func SaveUserInfo(data *UserData, uniqueid string) error { + + savestr, err := json.Marshal(data) + if err != nil { + return err + } + + err = redishandler.GetRedisClient().HSet(redis.USER_INFO__KEY, uniqueid, string(savestr)) + + return err +} + +func GetUserInfo(uid string) (*UserData, error) { + + data, err := redishandler.GetRedisClient().HGet(redis.USER_INFO__KEY, uid) + if err != nil { + return nil, err + } + var tmp UserData + err = json.Unmarshal([]byte(data), &tmp) + if err != nil { + return nil, err + } + + return &tmp, nil +} + +//初始化玩家信息 +func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { + udata := new(UserData) + udata.Gold = 0 + udata.Love = 0 + udata.InviteId = data.Fromid + udata.Highestlv = 0 + udata.CurBoxLv = 1 + udata.IsDouble = 0 + udata.IsAuto = 0 + udata.IsBoxAcc = 0 + udata.RandGiftDay = time.Now().Day() + udata.RandGiftNum = 6 + udata.RandGiftTime = int(time.Now().Unix()) + udata.Redbag = 0 + udata.IsFirstRedBgCat = 0 + + //初始化16个猫爬架 + for i := 0; i < 16; i++ { + var d1 PosData + d1.Pos = i + d1.Catlv = 0 + udata.PosInfo = append(udata.PosInfo, d1) + var d2 DataDesc + d2.Pos = i + d2.Catlv = 0 + + } + udata.Goldrate = 0 + udata.Loverate = 0 + + + //初始化商店信息 + initcatcfg := jsonconf.GetCatConfig(1) + if initcatcfg == nil { + logger.Error("get 1catcfg err") + return + } + var info BuyCatInfoData + info.Buytime = 0 + info.CurPrice,_= strconv.ParseInt(initcatcfg.Price,10,64) + info.IsMaxBuytime = 0 + udata.BuyCatInfo = append(udata.BuyCatInfo, info) + + //初始化猫咖门店数据 + udata.CatShopInfo.LeftTime = 0 + udata.CatShopInfo.Chapter = 1 + udata.CatShopInfo.DayNum = time.Now().Day() + udata.CatShopInfo.IsPlaying = 0 + udata.CatShopInfo.PlayTimes = 0 + udata.CatShopInfo.Section = 1 + udata.CatShopInfo.ThisIsWatch = 0 + udata.CatShopInfo.TotalWatchNumLeft = 8 // + + logger.Info("Init user data=%v", udata) + + //保存redis + SaveUserInfo(udata, strconv.Itoa(uuid)) + + + //初始化玩家仓库信息 + pware := new(UserWareHouseData) + for i := 0; i < 15; i++ { + var tmp WareHouseDesc + tmp.Warelv = 0 + pware.Info = append(pware.Info, tmp) + } + wares, err := json.Marshal(pware) + if err != nil { + logger.Info("InitUserInfo warehouse failed err=%v", err) + } + redishandler.GetRedisClient().HSet(redis.USER_WAREHOUSE_INFO, strconv.Itoa(uuid), string(wares)) + + //保存此次计算时间 + nowtimestr := strconv.Itoa(int(time.Now().Unix())) + redishandler.GetRedisClient().HSet(redis.USER_LAST_CALC_TIME, strconv.Itoa(uuid), nowtimestr) +} \ No newline at end of file diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index cb73536..cfce67a 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -169,37 +169,37 @@ func CheckErr(err error) { } func startServerHttpServe() { - http.HandleFunc("/cat/login", UserLogin) //登录 - http.HandleFunc("/cat/getuserdata", GetUserData) //拉取用户数据 - http.HandleFunc("/cat/exchangetwoPos", ExchangePos) //交换位置 - http.HandleFunc("/cat/clickcatbox", ClickCatBox) //请求点击猫箱子 - http.HandleFunc("/cat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子 - http.HandleFunc("/cat/acclecte", AcclecteGold) //请求点击猫箱子 - http.HandleFunc("/cat/automerge", AutoMerge) //请求自动合成 - http.HandleFunc("/cat/generatebox", GenerateBox) //请求点击猫箱子 - http.HandleFunc("/cat/clickrandgift", ClickRandGift) //请求点击猫箱子 - http.HandleFunc("/cat/querybuycat", QueryBuyCat) //请求商店购买信息 - http.HandleFunc("/cat/dobuycat", DoBuyCat) //购买猫 - http.HandleFunc("/cat/querwarehouse", QueryWareHouse) //请求仓库信息 - http.HandleFunc("/cat/putcattowarehouse", PutCattoWareHouse) //将合成界面的猫放入仓库 - http.HandleFunc("/cat/takecatoutfromwarehouse", TakeCatoutfromWareHouse) //将仓库的猫取出 - http.HandleFunc("/cat/acclecteboxrate ", AcclecteBoxRate) //请求点击猫箱子 - http.HandleFunc("/cat/queryautomergeinfo ", QueryAutomergeInfo) //请求点击猫箱子 - http.HandleFunc("/cat/querycatroominfo ", QueryCatRoomInfo) //请求点击猫箱子 - http.HandleFunc("/cat/buycatroom ", BuyCatRoom) //请求点击猫箱子 - http.HandleFunc("/cat/upcattoroom ", UpCattoRoom) //请求点击猫箱子 - http.HandleFunc("/cat/querycatshopinfo ", QueryCatShopInfo) //请求点击猫箱子 - http.HandleFunc("/cat/catshoplay ", CatShoPlay) //请求点击猫箱子 - http.HandleFunc("/cat/getcatshopreward ", GetCatShopReward) //请求点击猫箱子 - http.HandleFunc("/cat/acclectecatstory ", AcclecteCatStory) //请求点击猫箱子 - http.HandleFunc("/cat/updateuserinfo ", UpdateUserInfo) //请求点击猫箱子 - http.HandleFunc("/cat/queryplayerrank ", QueryPlayerRank) //请求点击猫箱子 - http.HandleFunc("/cat/querycompletetask ", QueryCompleteTask) //请求点击猫箱子 - http.HandleFunc("/cat/querycompleteachievement ", QueryCompleteAchievement) //请求点击猫箱子 - http.HandleFunc("/cat/gettaskreward ", GetTaskReward) //请求点击猫箱子 - http.HandleFunc("/cat/getachievereward ", GetAchieveReward) //请求点击猫箱子 - http.HandleFunc("/cat/startonlinetask ", StartOnlineTask) //请求开始在线时长任务 - http.HandleFunc("/cat/getofflinereward ", GetOfflineReward) //请求开始在线时长任务 + http.HandleFunc("/happycat/login", UserLogin) //登录 + http.HandleFunc("/happycat/getuserdata", GetUserData) //拉取用户数据 + http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置 + http.HandleFunc("/happycat/clickcatbox", ClickCatBox) //请求点击猫箱子 + http.HandleFunc("/happycat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子 + http.HandleFunc("/happycat/acclecte", AcclecteGold) //请求点击猫箱子 + http.HandleFunc("/happycat/automerge", AutoMerge) //请求自动合成 + http.HandleFunc("/happycat/generatebox", GenerateBox) //请求点击猫箱子 + http.HandleFunc("/happycat/clickrandgift", ClickRandGift) //请求点击猫箱子 + http.HandleFunc("/happycat/querybuycat", QueryBuyCat) //请求商店购买信息 + http.HandleFunc("/happycat/dobuycat", DoBuyCat) //购买猫 + http.HandleFunc("/happycat/querwarehouse", QueryWareHouse) //请求仓库信息 + http.HandleFunc("/happycat/putcattowarehouse", PutCattoWareHouse) //将合成界面的猫放入仓库 + http.HandleFunc("/happycat/takecatoutfromwarehouse", TakeCatoutfromWareHouse) //将仓库的猫取出 + http.HandleFunc("/happycat/acclecteboxrate ", AcclecteBoxRate) //请求点击猫箱子 + http.HandleFunc("/happycat/queryautomergeinfo ", QueryAutomergeInfo) //请求点击猫箱子 + http.HandleFunc("/happycat/querycatroominfo ", QueryCatRoomInfo) //请求点击猫箱子 + http.HandleFunc("/happycat/buycatroom ", BuyCatRoom) //请求点击猫箱子 + http.HandleFunc("/happycat/upcattoroom ", UpCattoRoom) //请求点击猫箱子 + http.HandleFunc("/happycat/querycatshopinfo ", QueryCatShopInfo) //请求点击猫箱子 + http.HandleFunc("/happycat/catshoplay ", CatShoPlay) //请求点击猫箱子 + http.HandleFunc("/happycat/getcatshopreward ", GetCatShopReward) //请求点击猫箱子 + http.HandleFunc("/happycat/acclectecatstory ", AcclecteCatStory) //请求点击猫箱子 + http.HandleFunc("/chappycatat/updateuserinfo ", UpdateUserInfo) //请求点击猫箱子 + http.HandleFunc("/happycat/queryplayerrank ", QueryPlayerRank) //请求点击猫箱子 + http.HandleFunc("/happycat/querycompletetask ", QueryCompleteTask) //请求点击猫箱子 + http.HandleFunc("/happycat/querycompleteachievement ", QueryCompleteAchievement) //请求点击猫箱子 + http.HandleFunc("/happycat/gettaskreward ", GetTaskReward) //请求点击猫箱子 + http.HandleFunc("/happycat/getachievereward ", GetAchieveReward) //请求点击猫箱子 + http.HandleFunc("/happycat/startonlinetask ", StartOnlineTask) //请求开始在线时长任务 + http.HandleFunc("/happycat/getofflinereward ", GetOfflineReward) //请求开始在线时长任务 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) @@ -755,8 +755,10 @@ func UserLogin(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session,X_Requested_With,Accept, Origin, Host, Connection, Accept-Encoding, Accept-Language,DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, If-Modified-Since, Cache-Control, Content-Type, Pragma") */ Uuid := 0 + Token := "" if len(r.Header) > 0 { - Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) + Uuid, _ = strconv.Atoi(r.Header.Get("uid")) + Token = r.Header.Get("token") } if Uuid == 0 { @@ -773,9 +775,9 @@ func UserLogin(w http.ResponseWriter, r *http.Request) { r.Body.Close() s := string(result) - logger.Info("UserLogin , body:%v,uuid=%v", s, Uuid) + logger.Info("UserLogin , body:%v,uuid=%v token=%v", s, Uuid,Token) -// HandlerLogin(w, s, Uuid) + HandlerLogin(w, s, Uuid,Token) } func ReviewAllianceHandler(w http.ResponseWriter, r *http.Request) { diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 64b5774..10ed193 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -1,18 +1,23 @@ package logic import ( - "common/beegomap" + "HttpServer/redishandler" + "common/logger" + "common/redis" + "encoding/json" + "fmt" "net/http" + "strconv" "sync" ) var ( - m_userInfo *beegomap.BeeMap //make(map[int32]*UserData + //m_userInfo *beegomap.BeeMap //make(map[int32]*UserData Maplock *sync.RWMutex ) func init() { - m_userInfo = beegomap.NewBeeMap() + //m_userInfo = beegomap.NewBeeMap() Maplock = new(sync.RWMutex) } @@ -20,4 +25,56 @@ func SetHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域 w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid") +} + +func HandlerLogin(w http.ResponseWriter, data string, uuid int,token string) { + SetHeader(w) + var resp UserLoginResp + resp.Code = 0 + resp.Message = "success" + var rdata UserLoginReq + err := json.Unmarshal([]byte(data), &rdata) + if err != nil { + logger.Info("json decode HandlerLogin data failed:%v,for:%v", err, data) + resp.Message = "json unmarshal failed" + resp.Code = 1 + respstr, _ := json.Marshal(&resp) + logger.Info("###HandlerLogin###rdata:%v", string(respstr)) + fmt.Fprint(w, string(respstr)) + return + } + + //首先判断一下是否是首次登陆 + isexist, _ := redishandler.GetRedisClient().HExists(redis.USER_INFO__KEY, strconv.Itoa(uuid)) + if !isexist { + //不存在 + //属于新登录的玩家数据 + InitUserInfo(&rdata, &resp, uuid) + + } else { + uinfo,err := GetUserInfo(strconv.Itoa(rdata.UserId)) + if err != nil { + logger.Info("GetUserInfo HandlerLogin data failed:%v,for:%v", err, data) + resp.Message = "GetUserInfo failed" + resp.Code = 2 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) + return + } + + resp.Data.Nickname = uinfo.NickName + resp.Data.UserId = strconv.Itoa(rdata.UserId) + resp.Data.AccessToken = token + resp.Data.HeadImg = uinfo.Head + resp.Data.LoginType = rdata.Lype + + } + + + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) + + logger.Info("###HandlerLogin###rdata:%v", string(respstr)) } \ No newline at end of file diff --git a/src/common/redis/def.go b/src/common/redis/def.go index 6a03d8d..318a830 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -1,13 +1,12 @@ package redis const ( - USER_LAST_LOGIN_TIME = "CATSERVER_USER_LAST_LOGIN_TIME" //玩家上次登陆时间 - USER_INFO = "CATSERVER_USER_USER_INFO" //玩家数据 - USER_LAST_CALC_TIME = "CATSERVER_USER_LAST_CALC_TIME" //玩家上一次数据计算时间 - USER_INVITE_ID = "CATSERVER_USER_INVITE_ID" //玩家邀请者ID - USER_STARTDOUBLE_TIME = "CATSERVER_USER_STARTDOUBLE_TIME" //开启双倍时间 - USER_STARTAUTO_TIME = "CATSERVER_USER_STARTAUTO_TIME" //开启自动合成时间 - USER_STARTACC_BOX_TIME = "CATSERVER_USER_STARTACC_BOX_TIME" //开启加速成产箱子 - USER_WAREHOUSE_INFO = "CATSERVER_USER_WAREHOUSE_INFO" //玩家仓库信息 - USER_GOLD_RANK = "CATSERVER_USER_GOLD_RANK" //玩家排行榜,根据金币排 + USER_INFO__KEY = "HAPPYCATSERVER_USER_USER_INFO" //玩家数据 + USER_LAST_CALC_TIME = "HAPPYCATSERVER_USER_LAST_CALC_TIME" //玩家上一次数据计算时间 + USER_INVITE_ID = "HAPPYCATSERVER_USER_INVITE_ID" //玩家邀请者ID + USER_STARTDOUBLE_TIME = "HAPPYCATSERVER_USER_STARTDOUBLE_TIME" //开启双倍时间 + USER_STARTAUTO_TIME = "HAPPYCATSERVER_USER_STARTAUTO_TIME" //开启自动合成时间 + USER_STARTACC_BOX_TIME = "HAPPYCATSERVER_USER_STARTACC_BOX_TIME" //开启加速成产箱子 + USER_WAREHOUSE_INFO = "HAPPYCATSERVER_USER_WAREHOUSE_INFO" //玩家仓库信息 + USER_GOLD_RANK = "HAPPYCATSERVER_USER_GOLD_RANK" //玩家排行榜,根据金币排 ) -- libgit2 0.21.0