From e0129d0d8c2aa0a55292e5b5ee1a28294e4b1ea2 Mon Sep 17 00:00:00 2001 From: 陆恒 Date: Sat, 18 Apr 2020 15:53:13 +0800 Subject: [PATCH] 猫咖啡接口提交 --- src/HttpServer/logic/datadef.go | 514 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/HttpServer/logic/errordef.go | 12 ++++++++++++ src/HttpServer/logic/function.go | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/HttpServer/logic/httpserver.go | 84 ++++++++++++++++++++++++++++++++++++++++-------------------------------------------- src/HttpServer/logic/logic.go | 298 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- src/HttpServer/main/main.go | 2 +- src/common/redis/def.go | 14 +++++--------- 7 files changed, 561 insertions(+), 467 deletions(-) create mode 100644 src/HttpServer/logic/errordef.go create mode 100644 src/HttpServer/logic/function.go diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 33aa992..0009112 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -1,456 +1,146 @@ package logic -type UserLoginData struct { - //Uuid int `json:"uuid"` - Fromid int `json:"fromid"` - Sharetype int `json:"sharetype"` -} - -type UserLoginResp struct { - Code int `json:"code"` - 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 { - //Uuid int `json:"uuid"` -} - -type GetUserDataResp struct { - Code int `json:"code"` - Message string `json:"message"` - Gold int64 `json:"gold"` - Love int64 `json:"love"` - Dougoldlefttime int `json:"dougoldlefttime"` - Automlefttime int `json:"automlefttime"` - Acclcteboxlefttime int `json:"acclcteboxlefttime"` - Israndgift int `json:"israndgift"` -} - -type DataDesc struct { - Pos int `json:"pos"` - Catlv int `json:"cat_lv"` - Countdown int `json:"countdown"` -} - -type ExchangePosReq struct { - //Uuid int `json:"uuid"` - Pos_1 int `json:"pos_1"` - Pos_2 int `json:"pos_2"` -} - -type ExchangePosResp struct { - Code int `json:"code"` - Message string `json:"message"` - Pos1_lv int `json:"pos1_lv"` - Pos2_lv int `json:"pos2_lv"` - Highest_lv int `json:"highest_lv"` - Add_num int `json:"add_num"` -} - -type ClickBoxReq struct { - //Uuid int `json:"uuid"` - Pos int `json:"pos"` -} - -type ClickBoxResp struct { - Code int `json:"code"` - Message string `json:"message"` - Pos int `json:"pos"` - Lv int `json:"lv"` -} - -type UpgradeBoxReq struct { - //Uuid int `json:"uuid"` -} -type UpgradeBoxResp struct { - Code int `json:"code"` - Message string `json:"message"` - Boxlv int `json:"boxlv"` -} - -type GenerateBoxReq struct { - //Uuid int `json:"uuid"` - Pos int `json:"pos"` -} - -type GenerateBoxResp struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type AcclecteReq struct { - //Uuid int `json:"uuid"` -} -type AcclecteResp struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type AcclecteBoxResp struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type AutomergeReq struct { - //Uuid int `json:"uuid"` -} -type AutomergeResp struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type QueryBuyCatReq struct { - //Uuid int `json:"uuid"` -} -type QueryBuyCatResp struct { - Code int `json:"code"` - Message string `json:"message"` - Maxcatlv int `json:"maxcatlv"` - Data []BuyCatDesc `json:"data"` -} - -type BuyCatDesc struct { - Lv int `json:"lv"` - Goldnum int64 `json:"goldnum"` -} - -type ClickRandGiftReq struct { - //Uuid int `json:"uuid"` -} -type ClickRandGiftResp struct { - Code int `json:"code"` - Message string `json:"message"` - Gold int64 `json:"gold"` - Lefttime int `json:"lefttime"` -} - -type DoBuyCatReq struct { - Lv int `json:"lv"` -} -type DoBuyCatResp struct { - Code int `json:"code"` - Message string `json:"message"` - Pos int `json:"pos"` -} - -type QueryWareHouseResp struct { - Code int `json:"code"` - Message string `json:"message"` - Data []DataDesc `json:"data"` -} - -type QueryAutomergeResp struct { - Code int `json:"code"` - Message string `json:"message"` - Goldrate int64 `json:"goldrate"` - Higestlv int `json:"higestlv"` - Curcatjianum int `json:"curcatjianum"` - Data []DataDesc `json:"data"` -} - -type PutWareHouseReq struct { - Pos int `json:"pos"` -} -type PutWareHouseResp struct { - Code int `json:"code"` - Message string `json:"message"` - Warepos int `json:"warepos"` -} - -type TakeWareHouseReq struct { - Warepos int `json:"warepos"` -} -type TakeWareHouseResp struct { - Code int `json:"code"` - Message string `json:"message"` - Pos int `json:"pos"` -} -type CatRoomDesc struct { - Pos int `json:"pos"` - Catlv int `json:"cat_lv"` -} +//登录类型枚举 +const ( + LOGIN_TYPE_TOURIST = 1 //游客登录 + LOGIN_TYPE_ACCOUNT = 2 //账号密码登录 + LOGIN_TYPE_WECHAT = 3 //微信登录 -type QueryCatRoomInfoResp struct { - Code int `json:"code"` - Message string `json:"message"` - Data []CatRoomDesc `json:"data"` -} +) -type BuyCatRoomReq struct { +type UserLoginReq struct { + Channel_id int `json:"channel_id"` + Invite_type int `json:"invite_type"` + Invite_res_id int `json:"invite_res_id"` + User_invite_uid int `json:"user_invite_uid"` + Scene int `json:"scene"` + RefAppId int `json:"refAppId"` + Code string `json:"code"` + Token string `json:"token"` + Logintype int `json:"logintype"` + Useraccount string `json:"useraccount"` + Userpwd string `json:"userpwd"` + Version string `json:"version"` + +} + +type UserBaseData struct { + User_id int `json:"user_id"` + User_gender int `json:"user_gender"` + User_nickname string `json:"user_nickname"` + User_openid string `json:"user_openid"` + User_avatar_url string `json:"user_avatar_url"` + User_city string `json:"user_city"` + User_token string `json:"user_token"` +} + +type UserExtData struct { + User_id int `json:"user_id"` + Hot int `json:"hot"` + Coin int64 `json:"coin"` + LoveExp int `json:"loveExp"` + Bean int `json:"bean"` + ShopNum int `json:"shopNum"` Lv int `json:"lv"` + Exp int `json:"exp"` + User_invite_uid int `json:"user_invite_uid"` + User_reg_time int `json:"user_reg_time"` + User_channel int `json:"user_channel"` + User_is_black int `json:"user_is_black"` + User_scene int `json:"user_scene"` + Reg_time int `json:"reg_time"` + Invite_uid int `json:"invite_uid"` } -type BuyCatRoomResp struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type UpCattoRoomReq struct { - Roompos int `json:"roompos"` - Callv int `json:"callv"` - Optype int `json:"optype"` -} - -type UpCattoRoommResp struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type QueryCatShopInfoResp struct { - Code int `json:"code"` - Message string `json:"message"` - Chapter int `json:"chapter"` - Section int `json:"section"` - Lefttime int `json:"lefttime"` - Canwatch int `json:"canwatch"` - Storyhappen int `json:"storyhappen"` -} - -type CatShoPlayReq struct { - Catlv int `json:"catlv"` -} -type CatShoPlayResp struct { - Code int `json:"code"` - Message string `json:"message"` - Lefttime int `json:"lefttime"` - Canwatch int `json:"canwatch"` -} - -type GetCatShopRewardReq struct { - Optype int `json:"optype"` -} - -type GetCatShopRewardResp struct { - Code int `json:"code"` - Message string `json:"message"` - Love int64 `json:"love"` -} - -type AcclecteCatStoryResp struct { - Code int `json:"code"` - Message string `json:"message"` -} - -type UpdateUserInfoReq struct { - Headurl string `json:"headurl"` - Nickname string `json:"nickname"` - Realname string `json:"realname"` -} - -type UpdateUserInfoResp struct { - Code int `json:"code"` - Message string `json:"message"` +type UserLoginData struct { + Dasedata UserBaseData `json:"UserBaseData"` + Extdata UserExtData `json:"user_ext_data"` } -type RankInfoDesc struct { - Rank int `json:"rank"` - Headurl string `json:"headurl"` - Nickname string `json:"nickname"` - Catlv int `json:"catlv"` - Goldnum int64 `json:"goldnum"` +type UserLoginResult struct { + Code int `json:"code"` + Data UserLoginData `json:"data"` } -type QueryPlayerRankResp struct { - Code int `json:"code"` - Message string `json:"message"` - Data []RankInfoDesc `json:"data"` -} -type QueryCompleteTaskDesc struct { - Taskid int `json:"taskid"` -} -type QueryOnlienTaskDesc struct { - Taskid int `json:"taskid"` - Lefttime int64 `json:"lefttime"` -} +type UserLoginResp struct { + Status string `json:"status"` + Result UserLoginResult `json:"result"` -type QueryCompleteTaskResp struct { - Code int `json:"code"` - Message string `json:"message"` - Data []QueryCompleteTaskDesc `json:"data"` - Online []QueryOnlienTaskDesc `json:"online"` } -type QueryCompleteAchievementDesc struct { - Achieveid int `json:"achieveid"` +type SaveUserDataReq struct{ + Token string `json:"token"` + Hot int `json:"hot"` + Coin int64 `json:"coin"` + Loveexp int `json:"loveexp"` + Bean int `json:"bean"` + Shopnum int `json:"shopnum"` } -type QueryCompleteAchievementResp struct { - Code int `json:"code"` - Message string `json:"message"` - Data []QueryCompleteAchievementDesc `json:"data"` +type SaveUserDataResp struct { + Status string `json:"status"` + Result UserLoginResult `json:"result"` } -type GetTaskRewardReq struct { - Taskid int `json:"taskid"` +type CommonResult struct { + Code int `json:"code"` + Data string `json:"data"` } -type GetTaskRewardResp struct { - Code int `json:"code"` - Message string `json:"message"` +type SaveDataReq struct{ + Token string `json:"token"` + Field string `json:"field"` + Value string `json:"value"` } -type GetAchieveRewardReq struct { - Achieveid int `json:"achieveid"` +type SaveDataResp struct { + Status string `json:"status"` + Result CommonResult `json:"result"` } -type GetAchieveRewardResp struct { - Code int `json:"code"` - Message string `json:"message"` +type GetDataDesc struct { + Base_data string `json:"base_data"` } -type StartOnlineTaskReq struct { - Taskid int `json:"taskid"` +type GetDataResult struct { + Code int `json:"code"` + Data GetDataDesc `json:"data"` } -type StartOnlineTaskResp struct { - Code int `json:"code"` - Message string `json:"message"` - Lefttime int `json:"lefttime"` +type GetDataReq struct{ + Token string `json:"token"` + Field string `json:"field"` } -type GetOfflineRewardReq struct { - Optype int `json:"optype"` +type GetDataResp struct { + Status string `json:"status"` + Result GetDataResult `json:"result"` } -type GetOfflineRewardResp struct { - Code int `json:"code"` - Message string `json:"message"` - Gold int64 `json:"gold"` - Love int64 `json:"love"` -} //********************************************************************************************************** -type PosData struct { - Pos int - Catlv int - Countdown int //倒计时 为0表示没有 - //UpPos int //上阵的位置 0表示未上阵 -} - -//玩家购买猫详情 -type BuyCatInfoData struct { - Buytime int //购买次数 - IsMaxBuytime int //是否达到涨价上线 1是0否 - CurPrice int64 //当前价格 -} - -//猫咖店家具数据 -type CatRoomData struct { - LvCatlv int //入住猫的等级 -} - -//猫咖门店数据 -type CatShopData struct { - Chapter int //当前所处进度 对应shopcaofig的id - Section int //当前小节进度 ,即当前大章节第几次故事 - IsPlaying int //是否处于探险模式 1是0否 - LeftTime int //探险剩余时间 - PlayTimes int //当前为第几次探险 - DayNum int //当天日期,用于判断跨天 - TotalWatchNumLeft int //当天剩余看视频次数 - ThisIsWatch int //本次探险是否已经看过视频 - IsMax int //是否已经通关 1是0否 - CurCatLv int //参加探险的猫等级 - IsStoryHappen int //此次是否触发故事 -} - -//玩家排行榜数据 -type UserRankInfo struct { - Gold int64 //金币 - Head string //头像地址 - NickName string //昵称 - Highestlv int //当前最高猫等级 - Uuid int //uuid -} - -//玩家任务数据 每日清零 -type TaskData struct { - //StartOnline int //开始计算在线时间 - StartOnline map[int]int64 //记录对应takid 和开始计时的时间 - BuyCatTime int //商店购买猫次数 - MergeTime int //合成猫次数 - PlayWithTime int //陪玩次数 - WatchAddTime int //看广告次数 - CompleteId map[int]int //已经完成的任务的id,对应task表的id value无用 - HaveComplete map[int]int //记录当日已完成的任务,已完成则不再完成 -} - -//玩家成就数据 -type AchieveMentData struct { - GetNewCatTime int //累计解锁新猫次数 - GetAllJia int //累计获得猫爬架次数 - GetRoomJu int //累计解锁新家具次数 - StoryTime int //累计解锁故事 - ShopTime int //累计解锁店铺 - CompleteId map[int]int //已经完成的任务的id,对应achievement表id value为无用 - HaveComplete map[int]int //记录已完成成就已完成则不再触发 -} //玩家数据 type UserData struct { - Gold int64 //金币 - Love int64 //爱心值 - Goldrate int64 //金币生成速率 - Loverate int64 //爱心生产速率 - Highestlv int //当前最高猫等级 - InviteId int //邀请者uid - CurBoxLv int //当前猫箱子等级 - IsDouble int //当前加速标签 1表示双倍收益 0表示正常 - IsAuto int //当前是否自动合成 - IsBoxAcc int //是否处于加速生成箱子状态 - RandGiftNum int //当前剩余空投猫粮次数 - RandGiftDay int //记录当前猫粮日期,当日期变化则重置RandGiftNum - RandGiftTime int //记录上一次空投猫粮时间 - Redbag int //红包值 单位为分 - Head string //头像地址 - NickName string //昵称 - RealName string //实名 - IsFirstRedBgCat int //是否合成过红包猫 0表示否1表示是 - OfflineGold int64 //离线金币 - OfflineLove int64 //离线爱心 - CatShopInfo CatShopData //猫咖门店数据 - Taskinfo TaskData //任务数据 - AchieveMent AchieveMentData //成就数据 - PosInfo []PosData //位置信息 从0开始 - BuyCatInfo []BuyCatInfoData //商店购买猫数据 第一个元素为1级猫 第二个为2级猫以此类推 - CatRoomInfo []CatRoomData //猫咖店数据 + Userid int //玩家id + Hot int + Coin int64 //金币 + Loevexp int + Bean int //咖啡豆 + Shopnum int //店铺数量 + Lv int + Exp int + UserInviteId int + Userregtime int + Channel int + Isblack int + Scene int + Regtime int + InviteUid int } -//仓库数据详情 -type WareHouseDesc struct { - Warelv int //红包猫等级 对应表id -} - -//玩家仓库数据 -type UserWareHouseData struct { - Info []WareHouseDesc //下标表示位置 -} - -const ( - TASK_TYPE_ONLINE = 1 //在线 - TASK_TYPE_BUYCAT = 2 //商店购买猫 - TASK_TYPE_MERGE = 3 //合成猫 - TASK_TYPE_PLAYWITHCAT = 4 //猫咪陪玩 - TASK_TYPE_WATCHADD = 5 //观看广告 - ACH_TYPE_GETCAT = 6 //累计解锁猫 - ACH_TYPE_GETCATJIA = 7 //累计获得猫爬架 - ACH_TYPE_GETCATROOMJIA = 8 //累计解锁新家具 - ACH_TYPE_GETSTORY = 9 //累计解锁新故事 - ACH_TYPE_GBESHOP = 10 //累计用于新店铺 -) diff --git a/src/HttpServer/logic/errordef.go b/src/HttpServer/logic/errordef.go new file mode 100644 index 0000000..cf48788 --- /dev/null +++ b/src/HttpServer/logic/errordef.go @@ -0,0 +1,12 @@ +package logic + + +const ( + ERROR_OK = 0 //没有错误 + ERROR_JSONUNMASHFAILED = 1 //json解析失败 + ERROR_GETUSERBASICFAILED = 2 //获取玩家basic数据失败 + ERROR_GETUSEREXTFAILED = 3 //获取玩家ext数据失败 + ERROR_GETUSERIDFAILED = 4 //获取玩家uuid失败 + ERROR_GETUSERMAPBYUIDFAILED = 5 //从玩家在线数据获取失败 + ERROR_SRVDB_FAILED = 6 //服務器存储数据失败或者读取失败 +) \ No newline at end of file diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go new file mode 100644 index 0000000..f4281f1 --- /dev/null +++ b/src/HttpServer/logic/function.go @@ -0,0 +1,104 @@ +package logic + +import ( + "HttpServer/redishandler" + "common/logger" + "common/redis" + "encoding/json" + "net/http" + "strconv" +) + +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 SetTouristUid(utoken string,uid int) error{ + err := redishandler.GetRedisClient().HSet(redis.USER_TOURIST_UID, utoken,strconv.Itoa(uid)) + if err != nil { + logger.Error("SetTouristUid failed,err=%v",err) + return err + } + return nil +} + +//获取游客的uid 返回值为uid +func GetTouristUid(utoken string) (int,error){ + uidstr, err := redishandler.GetRedisClient().HGet(redis.USER_TOURIST_UID, utoken) + if err != nil { + return 0,err + } + + uid,err := strconv.Atoi(uidstr) + return uid,err +} + +//获取新的uuid +func GetNewUUid() int { + redishandler.GetRedisClient().Incr(redis.USER_MAX_UUID) + newuuid ,err:= redishandler.GetRedisClient().GetInt(redis.USER_MAX_UUID) + if err != nil { + logger.Error("GetNewUUid failed,err=%v",err) + return 0 + } + + return newuuid+10000 +} + +func SaveUserBaseData(uuid int,value string) error { + err := redishandler.GetRedisClient().HSet(redis.USER_BASE_DATA, strconv.Itoa(uuid), value) + return err +} + +func GetUserBaseData(uuid int ) (string,error) { + strval,err := redishandler.GetRedisClient().HGet(redis.USER_BASIC_DATA, strconv.Itoa(uuid)) + if err != nil { + logger.Error("GetUserBasic failed,err=%v",err) + return "",err + } + + return strval,err + +} + +func SaveUserBasic(uuid int,value string) error { + err := redishandler.GetRedisClient().HSet(redis.USER_BASIC_DATA, strconv.Itoa(uuid), value) + return err +} + +func GetUserBasic(uuid int ) (*UserBaseData,error) { + strval,err := redishandler.GetRedisClient().HGet(redis.USER_BASIC_DATA, strconv.Itoa(uuid)) + if err != nil { + logger.Error("GetUserBasic failed,err=%v",err) + return nil,err + } + basic := new(UserBaseData) + err = json.Unmarshal([]byte(strval), basic) + return basic,err + +} + +func SaveUserExt(extdata * UserData) error { + if extdata == nil { + return nil + } + m_userInfo.Set(uint32(extdata.Userid),extdata) + + ext,_ := json.Marshal(&extdata) + err := redishandler.GetRedisClient().HSet(redis.USER_EXT_DATA, strconv.Itoa(extdata.Userid), string(ext)) + return err +} + +func GetUserExt(uuid int) (*UserExtData,error) { + strval,err := redishandler.GetRedisClient().HGet(redis.USER_EXT_DATA, strconv.Itoa(uuid)) + if err != nil { + logger.Error("GetUserExt failed,err=%v",err) + return nil,err + } + ext := new(UserExtData) + err = json.Unmarshal([]byte(strval), ext) + return ext,err +} \ No newline at end of file diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index ca4ece7..e716639 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -2,11 +2,7 @@ package logic import ( "HttpServer/conf" - "bytes" "common/logger" - "encoding/json" - "strconv" - "io/ioutil" //"log" "net/http" @@ -23,42 +19,7 @@ func StartHttpServe() { //just for test func Testsendhttp() { - var test UserLoginData - //test.Uuid = 100 - test.Fromid = 200 - test.Sharetype = 1 - - client := &http.Client{} - bys, err := json.Marshal(&test) - if err != nil { - logger.Error("testsendhttp failed=%v", err) - return - } - body := bytes.NewBuffer(bys) - url := "http://127.0.0.1:50056/cat/login" - reqest, err := http.NewRequest("POST", url, body) - if err != nil { - logger.Error("http.NewRequest failed") - } - reqest.Header.Add("Uuid", "101") - //发送 - //res, err := http.Post(url, "application/json;charset=utf-8", body) - res, err := client.Do(reqest) - if err != nil { - logger.Error(" post failed to %v err:%v data:%v", url, err, string(bys)) - return - } - - result, _ := ioutil.ReadAll(res.Body) - res.Body.Close() - - s := string(result) - var resp GetUserDataResp - resp.Code = 0 - var rdata UserLoginResp - _ = json.Unmarshal([]byte(s), &rdata) - logger.Info("testsendhttp , body:%v", rdata) } func CheckErr(err error) { @@ -68,13 +29,48 @@ func CheckErr(err error) { } func startServerHttpServe() { - http.HandleFunc("/cat/login", UserLogin) //登录 + http.HandleFunc("/catcafe/login", UserLogin) //登录 + http.HandleFunc("/catcafe/user/saveUserData", saveUserData) //登录 + http.HandleFunc("/catcafe/data/saveData", saveData) //登录 + http.HandleFunc("/catcafe/data/getData", getData) //登录 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } +func saveUserData(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("saveUserData , body:%v,uuid=%v", s) + + HandleSaveUserData(w,s) +} + +func saveData(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("saveData , body:%v,uuid=%v", s) + + HandlesaveData(w,s) +} + +func getData(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("UserLogin , body:%v,uuid=%v", s) + + HandlegetData(w,s) +} func UserLogin(w http.ResponseWriter, r *http.Request) { @@ -86,21 +82,21 @@ func UserLogin(w http.ResponseWriter, r *http.Request) { //w.Header().Add("Access-Control-Allow-Headers", "") //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 + /*Uuid := 0 if len(r.Header) > 0 { Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) } if Uuid == 0 { return - } + }*/ result, _ := ioutil.ReadAll(r.Body) r.Body.Close() s := string(result) - logger.Info("UserLogin , body:%v,uuid=%v", s, Uuid) + logger.Info("UserLogin , body:%v,uuid=%v", s) - //HandlerLogin(w, s, Uuid) + HandleUserLogin(w,s) } diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 697a16f..0100536 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -1 +1,297 @@ -package logic \ No newline at end of file +package logic + +import ( + + "common/beegomap" + "common/logger" + + "encoding/json" + "fmt" + "net/http" + + "time" +) + +var ( + m_userInfo *beegomap.BeeMap //make(map[int32]*UserData +) + +func init() { + m_userInfo = beegomap.NewBeeMap() +} + + + +func InitTourist(req *UserLoginReq,resp *UserLoginResp) { + //首先生成user_base_data + var basedata UserBaseData + basedata.User_id = GetNewUUid() + basedata.User_avatar_url = "" + basedata.User_city = "天堂" + basedata.User_gender = 1 + basedata.User_nickname = "游客" + string(basedata.User_id) + basedata.User_openid = "" + basedata.User_token = req.Token + resp.Result.Data.Dasedata = basedata + //保存base data + basic, _ := json.Marshal(&basedata) + SaveUserBasic(basedata.User_id,string(basic)) + + SetTouristUid(req.Token,basedata.User_id) + //然后生成user_ext_data + var extdata UserExtData + extdata.User_id = basedata.User_id + extdata.Lv = 1 + extdata.Bean = 0 + extdata.Coin = 0 + extdata.Exp = 0 + extdata.Hot = 0 + extdata.Invite_uid = req.User_invite_uid + extdata.LoveExp = 0 + extdata.Reg_time = int(time.Now().Unix()) + extdata.ShopNum = 0 + extdata.User_channel = req.Channel_id + extdata.User_is_black = 0 + extdata.User_reg_time = int(time.Now().Unix()) + extdata.User_scene = req.Scene + resp.Result.Data.Extdata = extdata + //保存 + udata :=new(UserData) + udata.Scene = extdata.User_scene + udata.Hot = extdata.Hot + udata.Exp = extdata.Exp + udata.Coin = extdata.Coin + udata.Bean = extdata.Bean + udata.Lv = extdata.Lv + udata.Channel = extdata.User_channel + udata.InviteUid = extdata.Invite_uid + udata.Isblack = extdata.User_is_black + udata.Loevexp = extdata.LoveExp + udata.Regtime = extdata.Reg_time + udata.Shopnum = extdata.ShopNum + udata.Userid = extdata.User_id + udata.UserInviteId = extdata.User_invite_uid + udata.Userregtime = extdata.User_reg_time + + SaveUserExt(udata) + +} + +//处理游客登录 +func HandleTouristLogin(w http.ResponseWriter, req *UserLoginReq,resp *UserLoginResp) { + + logger.Info("HandleTouristLogin req=%v,resp=%v",req,resp) + for { + //首先判断是否存在这个游客账号 + uuid,err := GetTouristUid(req.Token) + if err != nil { + //新账号 初始化 + InitTourist(req,resp) + }else { + //读取数据 + basic,err := GetUserBasic(uuid) + if err != nil { + logger.Error("HandleTouristLogin getbasic failed=%v", err) + resp.Result.Code = ERROR_GETUSERBASICFAILED + break + } + resp.Result.Data.Dasedata = *basic + + ext,err := GetUserExt(uuid) + if err != nil { + logger.Error("HandleTouristLogin getext failed=%v", err) + resp.Result.Code = ERROR_GETUSEREXTFAILED + break + } + resp.Result.Data.Extdata = *ext + + m_userInfo.Set(uint32(ext.User_id),ext) + } + + resp.Result.Code = ERROR_OK + break + } + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandleUserLogin(w http.ResponseWriter, data string) { + SetHeader(w) + var resp UserLoginResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata UserLoginReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleUserLogin json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + if rdata.Logintype ==LOGIN_TYPE_TOURIST { + //游客登录 + HandleTouristLogin(w,&rdata,&resp) + break + } + + if rdata.Logintype == LOGIN_TYPE_ACCOUNT { + //账号密码登录 + + break + } + + if rdata.Logintype == LOGIN_TYPE_WECHAT { + //微信登录 + + break + } + + + } + + //回包 + //respstr, _ := json.Marshal(&resp) + //fmt.Fprint(w, string(respstr)) +} + +func HandleSaveUserData(w http.ResponseWriter, data string) { + SetHeader(w) + var resp SaveUserDataResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata SaveUserDataReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandleSaveUserData json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandleSaveUserData json unmarshal failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + vv := m_userInfo.Get(uint32(uuid)) + if vv == nil { + logger.Error("HandleSaveUserData failed=%v", err) + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED + break + } + + uinfo := vv.(*UserData) + uinfo.Coin = rdata.Coin + uinfo.Loevexp = rdata.Loveexp + uinfo.Hot = rdata.Hot + uinfo.Bean = rdata.Bean + uinfo.Shopnum = rdata.Shopnum + SaveUserExt(uinfo) + + basic,err := GetUserBasic(uuid) + if err != nil { + logger.Error("HandleTouristLogin getbasic failed=%v", err) + resp.Result.Code = ERROR_GETUSERBASICFAILED + break + } + resp.Result.Data.Dasedata = *basic + + ext,err := GetUserExt(uuid) + if err != nil { + logger.Error("HandleTouristLogin getext failed=%v", err) + resp.Result.Code = ERROR_GETUSEREXTFAILED + break + } + resp.Result.Data.Extdata = *ext + + resp.Result.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlesaveData(w http.ResponseWriter, data string) { + SetHeader(w) + var resp SaveDataResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata SaveDataReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandlesaveData json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandlesaveData GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + + err = SaveUserBaseData(uuid,rdata.Value) + + if err != nil { + logger.Error("HandlesaveData save failed=%v", err) + resp.Result.Code = ERROR_SRVDB_FAILED + break + } + + resp.Result.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + +func HandlegetData(w http.ResponseWriter, data string) { + SetHeader(w) + var resp SaveDataResp + resp.Status = "true" + resp.Result.Code = ERROR_OK + var rdata SaveDataReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandlegetData json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + uuid,err := GetTouristUid(rdata.Token) + if err != nil || uuid==0{ + logger.Error("HandlegetData GetTouristUid failed=%v", err) + resp.Result.Code = ERROR_GETUSERIDFAILED + break + } + + + ubase,err := GetUserBaseData(uuid) + + if err != nil { + logger.Error("HandlegetData get failed=%v", err) + resp.Result.Code = ERROR_SRVDB_FAILED + break + } + + resp.Result.Data = ubase + resp.Result.Code = ERROR_OK + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} \ No newline at end of file diff --git a/src/HttpServer/main/main.go b/src/HttpServer/main/main.go index fa99570..0b86cbc 100644 --- a/src/HttpServer/main/main.go +++ b/src/HttpServer/main/main.go @@ -45,7 +45,7 @@ func main() { return } - + err = redishandler.Init() if err != nil { diff --git a/src/common/redis/def.go b/src/common/redis/def.go index 6a03d8d..9745af4 100644 --- a/src/common/redis/def.go +++ b/src/common/redis/def.go @@ -1,13 +1,9 @@ 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_TOURIST_UID = "CATCAFE_USER_TOURIST_UID" //存储对应设备编码与uid的对应关系 + USER_MAX_UUID = "CATCAFE_USER_MAX_UUID" //记录当前最大的uid,新增自增即可 + USER_BASIC_DATA = "CATCAFE_USER_BASIC_DATA" //玩家基础信息 + USER_EXT_DATA = "CATCAFE_USER_EXT_DATA" //玩家游戏数据 + USER_BASE_DATA = "CATCAFE_USER_BASE_DATA" //小游戏自定义数据 ) -- libgit2 0.21.0