Commit 27bd56386ce1d622d796a64f5b4b34e76e00ccba

Authored by 陆恒
1 parent a3d78f8e
Exists in master

提交欢乐招财猫接口

src/HttpServer/jsonconf/jsonconf.go
@@ -70,6 +70,20 @@ func GetCatConfig(lv int) *CatDesc { @@ -70,6 +70,20 @@ func GetCatConfig(lv int) *CatDesc {
70 return nil 70 return nil
71 } 71 }
72 72
  73 +//获取红包猫配置
  74 +func GetRedCatConfig(lv int) *RedCatDesc {
  75 + reallv := lv - 100
  76 + if reallv < 1 {
  77 + reallv = 1
  78 + }
  79 + for _, v := range g_jsonconf.RedCatConfig {
  80 + if v.Id == reallv {
  81 + return &v
  82 + }
  83 + }
  84 + return nil
  85 +}
  86 +
73 87
74 func file_get_contents(path string) ([]byte, error) { 88 func file_get_contents(path string) ([]byte, error) {
75 f, err := os.Open(path) 89 f, err := os.Open(path)
src/HttpServer/logic/datadef.go
1 package logic 1 package logic
2 2
3 type UserLoginReq struct { 3 type UserLoginReq struct {
4 - Lype int `json:"type"` 4 + Lype int `json:"type"`
5 UserId int `json:"userId"` 5 UserId int `json:"userId"`
6 - Fromid int `json:"fromid"`  
7 - 6 + Fromid int `json:"fromid"`
8 } 7 }
9 8
10 type UserLoginData struct { 9 type UserLoginData struct {
11 - UserId string `json:"userId"`  
12 - AccessToken string `json:"accessToken"`  
13 - LoginType int `json:"loginType"` 10 + UserId string `json:"userId"`
  11 + AccessToken string `json:"accessToken"`
  12 + LoginType int `json:"loginType"`
14 Nickname string `json:"nickname"` 13 Nickname string `json:"nickname"`
15 - HeadImg string `json:"headImg"` 14 + HeadImg string `json:"headImg"`
16 } 15 }
17 16
18 type UserLoginResp struct { 17 type UserLoginResp struct {
19 - Code int `json:"code"`  
20 - Data UserLoginData `json:"data"`  
21 - Message string `json:"message"` 18 + Code int `json:"code"`
  19 + Data UserLoginData `json:"data"`
  20 + Message string `json:"message"`
22 } 21 }
23 22
24 type GetUserDataReq struct { 23 type GetUserDataReq struct {
25 //Uuid int `json:"uuid"` 24 //Uuid int `json:"uuid"`
26 } 25 }
27 26
  27 +type offlineRewardDesc struct {
  28 + OfflineTime int `json:"offlineTime"`
  29 + Income string `json:"income"`
  30 +}
  31 +
  32 +type GetUserDataData struct {
  33 + TimingReward bool `json:"timingReward"`
  34 + OfflineReward offlineRewardDesc `json:"offlineReward"`
  35 + Output string `json:"output"`
  36 + Coin string `json:"coin"`
  37 + Now int `json:"now"`
  38 +}
  39 +
28 type GetUserDataResp struct { 40 type GetUserDataResp struct {
29 - Code int `json:"code"`  
30 - Message string `json:"message"`  
31 - Gold int64 `json:"gold"`  
32 - Love int64 `json:"love"`  
33 - Dougoldlefttime int `json:"dougoldlefttime"`  
34 - Automlefttime int `json:"automlefttime"`  
35 - Acclcteboxlefttime int `json:"acclcteboxlefttime"`  
36 - Israndgift int `json:"israndgift"` 41 + Code int `json:"code"`
  42 + Message string `json:"message"`
  43 + Data GetUserDataData `json:"data"`
37 } 44 }
38 45
39 type DataDesc struct { 46 type DataDesc struct {
@@ -135,12 +142,25 @@ type ClickRandGiftResp struct { @@ -135,12 +142,25 @@ type ClickRandGiftResp struct {
135 } 142 }
136 143
137 type DoBuyCatReq struct { 144 type DoBuyCatReq struct {
138 - Lv int `json:"lv"` 145 + CatId int `json:"catId"`
  146 +}
  147 +
  148 +type DoBuyCatCoin struct {
  149 + UserId int `json:"userId"`
  150 + UpdateTime int `json:"updateTime"`
  151 + Coin string `json:"coin"`
  152 + IcomeRate string `json:"icomeRate"`
  153 +}
  154 +
  155 +type DoBuyCatData struct {
  156 + Position int `json:"position"`
  157 + Price string `json:"price"`
  158 + Coin DoBuyCatCoin `json:"coin"`
139 } 159 }
140 type DoBuyCatResp struct { 160 type DoBuyCatResp struct {
141 - Code int `json:"code"`  
142 - Message string `json:"message"`  
143 - Pos int `json:"pos"` 161 + Code int `json:"code"`
  162 + Message string `json:"message"`
  163 + Data DoBuyCatData `json:"data"`
144 } 164 }
145 165
146 type QueryWareHouseResp struct { 166 type QueryWareHouseResp struct {
@@ -255,10 +275,11 @@ type UpdateUserInfoResp struct { @@ -255,10 +275,11 @@ type UpdateUserInfoResp struct {
255 275
256 type RankInfoDesc struct { 276 type RankInfoDesc struct {
257 Rank int `json:"rank"` 277 Rank int `json:"rank"`
  278 + UserId int `json:"userId"`
258 Headurl string `json:"headurl"` 279 Headurl string `json:"headurl"`
259 Nickname string `json:"nickname"` 280 Nickname string `json:"nickname"`
260 - Catlv int `json:"catlv"`  
261 - Goldnum int64 `json:"goldnum"` 281 + CatName string `json:"text"`
  282 + Income int64 `json:"income"`
262 } 283 }
263 284
264 type QueryPlayerRankResp struct { 285 type QueryPlayerRankResp struct {
@@ -322,14 +343,16 @@ type StartOnlineTaskResp struct { @@ -322,14 +343,16 @@ type StartOnlineTaskResp struct {
322 } 343 }
323 344
324 type GetOfflineRewardReq struct { 345 type GetOfflineRewardReq struct {
325 - Optype int `json:"optype"` 346 + Reward int `json:"reward"`
  347 + Optype int `json:"type"`
  348 +}
  349 +type GetOfflineRewardData struct {
326 } 350 }
327 351
328 type GetOfflineRewardResp struct { 352 type GetOfflineRewardResp struct {
329 - Code int `json:"code"`  
330 - Message string `json:"message"`  
331 - Gold int64 `json:"gold"`  
332 - Love int64 `json:"love"` 353 + Code int `json:"code"`
  354 + Message string `json:"message"`
  355 + Data GetOfflineRewardData `json:"data"`
333 } 356 }
334 357
335 //********************************************************************************************************** 358 //**********************************************************************************************************
@@ -402,9 +425,10 @@ type AchieveMentData struct { @@ -402,9 +425,10 @@ type AchieveMentData struct {
402 425
403 //玩家数据 426 //玩家数据
404 type UserData struct { 427 type UserData struct {
405 - UserId int //玩家id  
406 - RegTime int //注册时间 428 + UserId int //玩家id
  429 + RegTime int //注册时间
407 Gold int64 //金币 430 Gold int64 //金币
  431 + GoldSum int64 //玩家累计金币
408 Love int64 //爱心值 432 Love int64 //爱心值
409 Goldrate int64 //金币生成速率 433 Goldrate int64 //金币生成速率
410 Loverate int64 //爱心生产速率 434 Loverate int64 //爱心生产速率
src/HttpServer/logic/function.go
@@ -40,7 +40,8 @@ func GetUserInfo(uid string) (*UserData, error) { @@ -40,7 +40,8 @@ func GetUserInfo(uid string) (*UserData, error) {
40 //初始化玩家信息 40 //初始化玩家信息
41 func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { 41 func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) {
42 udata := new(UserData) 42 udata := new(UserData)
43 - udata.Gold = 0 43 + udata.Gold = 100000
  44 + udata.GoldSum += udata.Gold
44 udata.Love = 0 45 udata.Love = 0
45 udata.InviteId = data.Fromid 46 udata.InviteId = data.Fromid
46 udata.Highestlv = 0 47 udata.Highestlv = 0
@@ -68,7 +69,6 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { @@ -68,7 +69,6 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) {
68 udata.Goldrate = 0 69 udata.Goldrate = 0
69 udata.Loverate = 0 70 udata.Loverate = 0
70 71
71 -  
72 //初始化商店信息 72 //初始化商店信息
73 initcatcfg := jsonconf.GetCatConfig(1) 73 initcatcfg := jsonconf.GetCatConfig(1)
74 if initcatcfg == nil { 74 if initcatcfg == nil {
@@ -77,7 +77,7 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { @@ -77,7 +77,7 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) {
77 } 77 }
78 var info BuyCatInfoData 78 var info BuyCatInfoData
79 info.Buytime = 0 79 info.Buytime = 0
80 - info.CurPrice,_= strconv.ParseInt(initcatcfg.Price,10,64) 80 + info.CurPrice, _ = strconv.ParseInt(initcatcfg.Price, 10, 64)
81 info.IsMaxBuytime = 0 81 info.IsMaxBuytime = 0
82 udata.BuyCatInfo = append(udata.BuyCatInfo, info) 82 udata.BuyCatInfo = append(udata.BuyCatInfo, info)
83 83
@@ -96,7 +96,6 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { @@ -96,7 +96,6 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) {
96 //保存redis 96 //保存redis
97 SaveUserInfo(udata, strconv.Itoa(uuid)) 97 SaveUserInfo(udata, strconv.Itoa(uuid))
98 98
99 -  
100 //初始化玩家仓库信息 99 //初始化玩家仓库信息
101 pware := new(UserWareHouseData) 100 pware := new(UserWareHouseData)
102 for i := 0; i < 15; i++ { 101 for i := 0; i < 15; i++ {
@@ -113,4 +112,138 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) { @@ -113,4 +112,138 @@ func InitUserInfo(data *UserLoginReq, resp *UserLoginResp, uuid int) {
113 //保存此次计算时间 112 //保存此次计算时间
114 nowtimestr := strconv.Itoa(int(time.Now().Unix())) 113 nowtimestr := strconv.Itoa(int(time.Now().Unix()))
115 redishandler.GetRedisClient().HSet(redis.USER_LAST_CALC_TIME, strconv.Itoa(uuid), nowtimestr) 114 redishandler.GetRedisClient().HSet(redis.USER_LAST_CALC_TIME, strconv.Itoa(uuid), nowtimestr)
116 -}  
117 \ No newline at end of file 115 \ No newline at end of file
  116 +}
  117 +
  118 +//计算购买后猫箱子的位置,将箱子放到对应位置 返回值表示位置 -1表示失败都满了
  119 +func getCatPutPos(uinfo *UserData, clv int) int {
  120 + pos := -1
  121 + for k, v := range uinfo.PosInfo {
  122 + if v.Catlv == 0 {
  123 + uinfo.PosInfo[k].Catlv = clv
  124 + uinfo.PosInfo[k].Pos = k
  125 + //v.Catlv = clv
  126 + //v.Pos = k
  127 + pos = k
  128 + break
  129 + }
  130 + }
  131 + return pos
  132 +}
  133 +
  134 +func (udata *UserData) CalcGoldRate() int64 {
  135 + //计算出所有速率的和
  136 + //计算方式为 首先计算合成界面猫的产出速率,然后计算红毛包的产出速率,最后计算仓库中的猫的产出速率
  137 + var sumrate int64
  138 + cfg37 := jsonconf.GetCatConfig(37)
  139 + if cfg37 == nil {
  140 + logger.Error("37cfg err!!")
  141 + return 0
  142 + }
  143 + for _, v := range udata.PosInfo {
  144 + if v.Catlv > 0 && v.Catlv < 100 {
  145 + //有猫存在的要计算一下
  146 + //非红包猫
  147 + for _, vv := range jsonconf.GetJsonConf().CatConfig {
  148 + if vv.Id == v.Catlv {
  149 + onerate, _ := strconv.ParseInt(vv.Gold_get, 10, 64)
  150 + sumrate += onerate
  151 + break
  152 + }
  153 + }
  154 + }
  155 +
  156 + if v.Catlv > 100 {
  157 + //红包猫 需要判断是否产金币
  158 + rcfg := jsonconf.GetRedCatConfig(v.Catlv)
  159 + if rcfg != nil {
  160 + if rcfg.Is_37 != 0 {
  161 + onerate, _ := strconv.ParseInt(cfg37.Gold_get, 10, 64)
  162 + sumrate += onerate
  163 + }
  164 + } else {
  165 + logger.Error("GetRedCatConfig failed lv=%v", v.Catlv)
  166 + }
  167 + }
  168 + }
  169 +
  170 + udatastr, err := redishandler.GetRedisClient().HGet(redis.USER_WAREHOUSE_INFO, strconv.Itoa(udata.UserId))
  171 + if err != nil {
  172 + logger.Error("CalcGoldRate failed err=%v", err)
  173 + return sumrate
  174 + }
  175 + wdata := new(UserWareHouseData)
  176 + err = json.Unmarshal([]byte(udatastr), wdata)
  177 + if err != nil {
  178 + logger.Error("CalcGoldRate Unmarshal redis failed ")
  179 + return sumrate
  180 + }
  181 + for _, v := range wdata.Info {
  182 + rcfg := jsonconf.GetRedCatConfig(v.Warelv + 100)
  183 + if rcfg != nil {
  184 + if rcfg.Is_37 != 0 {
  185 + onerate, _ := strconv.ParseInt(cfg37.Gold_get, 10, 64)
  186 + sumrate += onerate
  187 + }
  188 + } else {
  189 + logger.Error("GetRedCatConfig failed lv=%v", v.Warelv+100)
  190 + }
  191 + }
  192 +
  193 + return sumrate
  194 +}
  195 +
  196 +//发生金币变动时保存排行榜
  197 +func (udata *UserData) AddToRank() error {
  198 + err := redishandler.GetRedisClient().Zadd(redis.USER_GOLD_RANK, float64(udata.Gold), strconv.Itoa(udata.UserId))
  199 + if err != nil {
  200 + logger.Error("AddToRank failed err=%v", err)
  201 + }
  202 + return err
  203 +}
  204 +
  205 +//计算最高等级猫的名字
  206 +func (u *UserData) CalcHigestCatName() string {
  207 + higestlv := 0
  208 + for _, val := range u.PosInfo {
  209 + if higestlv < val.Catlv {
  210 + higestlv = val.Catlv
  211 + }
  212 + }
  213 +
  214 + //计算仓库内的
  215 + udatastr, err := redishandler.GetRedisClient().HGet(redis.USER_WAREHOUSE_INFO, strconv.Itoa(u.UserId))
  216 + if err != nil {
  217 + logger.Error("CalcHigestCatName failed err=%v", err)
  218 + return ""
  219 + }
  220 + wdata := new(UserWareHouseData)
  221 + err = json.Unmarshal([]byte(udatastr), wdata)
  222 + if err != nil {
  223 + logger.Error("CalcHigestCatName Unmarshal redis failed ")
  224 + return ""
  225 + }
  226 + for _, val := range wdata.Info {
  227 + reallv := val.Warelv + 100
  228 + if higestlv < reallv {
  229 + higestlv = reallv
  230 + }
  231 + }
  232 +
  233 + //计算猫名字
  234 + if higestlv > 100 {
  235 + cfg := jsonconf.GetRedCatConfig(higestlv - 100)
  236 + if cfg == nil {
  237 + logger.Error("CalcHigestCatName failed getcfg higestlv=%v", higestlv)
  238 + return ""
  239 + }
  240 + return cfg.Name
  241 + } else {
  242 + cfg := jsonconf.GetCatConfig(higestlv)
  243 + if cfg == nil {
  244 + logger.Error("CalcHigestCatName failed getcfg higestlv=%v", higestlv)
  245 + return ""
  246 + }
  247 + return cfg.Name
  248 + }
  249 +
  250 +}
src/HttpServer/logic/httpserver.go
@@ -14,7 +14,6 @@ import ( @@ -14,7 +14,6 @@ import (
14 "net/http" 14 "net/http"
15 ) 15 )
16 16
17 -  
18 func StartHttpServe() { 17 func StartHttpServe() {
19 startServerHttpServe() 18 startServerHttpServe()
20 } 19 }
@@ -169,17 +168,21 @@ func CheckErr(err error) { @@ -169,17 +168,21 @@ func CheckErr(err error) {
169 } 168 }
170 169
171 func startServerHttpServe() { 170 func startServerHttpServe() {
172 - http.HandleFunc("/api/account/login", UserLogin) //登录  
173 - http.HandleFunc("/happycat/getuserdata", GetUserData) //拉取用户数据  
174 - http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置  
175 - http.HandleFunc("/happycat/clickcatbox", ClickCatBox) //请求点击猫箱子  
176 - http.HandleFunc("/happycat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子  
177 - http.HandleFunc("/happycat/acclecte", AcclecteGold) //请求点击猫箱子  
178 - http.HandleFunc("/happycat/automerge", AutoMerge) //请求自动合成  
179 - http.HandleFunc("/happycat/generatebox", GenerateBox) //请求点击猫箱子  
180 - http.HandleFunc("/happycat/clickrandgift", ClickRandGift) //请求点击猫箱子  
181 - http.HandleFunc("/happycat/querybuycat", QueryBuyCat) //请求商店购买信息  
182 - http.HandleFunc("/happycat/dobuycat", DoBuyCat) //购买猫 171 + http.HandleFunc("/api/account/login", UserLogin) //登录
  172 + http.HandleFunc("/api/home/buy", DoBuyCat) //购买猫
  173 + http.HandleFunc("/api/home/synResource", GetUserData) //同步资源
  174 + http.HandleFunc("/api/home/recvOfflineReward", GetOfflineReward) //领取离线奖励
  175 + http.HandleFunc("api/ranking/list", QueryPlayerRank) //排行榜
  176 +
  177 + http.HandleFunc("/happycat/exchangetwoPos", ExchangePos) //交换位置
  178 + http.HandleFunc("/happycat/clickcatbox", ClickCatBox) //请求点击猫箱子
  179 + http.HandleFunc("/happycat/upgradecatbox", UpgradeCatBox) //请求点击猫箱子
  180 + http.HandleFunc("/happycat/acclecte", AcclecteGold) //请求点击猫箱子
  181 + http.HandleFunc("/happycat/automerge", AutoMerge) //请求自动合成
  182 + http.HandleFunc("/happycat/generatebox", GenerateBox) //请求点击猫箱子
  183 + http.HandleFunc("/happycat/clickrandgift", ClickRandGift) //请求点击猫箱子
  184 + http.HandleFunc("/happycat/querybuycat", QueryBuyCat) //请求商店购买信息
  185 +
183 http.HandleFunc("/happycat/querwarehouse", QueryWareHouse) //请求仓库信息 186 http.HandleFunc("/happycat/querwarehouse", QueryWareHouse) //请求仓库信息
184 http.HandleFunc("/happycat/putcattowarehouse", PutCattoWareHouse) //将合成界面的猫放入仓库 187 http.HandleFunc("/happycat/putcattowarehouse", PutCattoWareHouse) //将合成界面的猫放入仓库
185 http.HandleFunc("/happycat/takecatoutfromwarehouse", TakeCatoutfromWareHouse) //将仓库的猫取出 188 http.HandleFunc("/happycat/takecatoutfromwarehouse", TakeCatoutfromWareHouse) //将仓库的猫取出
@@ -192,14 +195,14 @@ func startServerHttpServe() { @@ -192,14 +195,14 @@ func startServerHttpServe() {
192 http.HandleFunc("/happycat/catshoplay ", CatShoPlay) //请求点击猫箱子 195 http.HandleFunc("/happycat/catshoplay ", CatShoPlay) //请求点击猫箱子
193 http.HandleFunc("/happycat/getcatshopreward ", GetCatShopReward) //请求点击猫箱子 196 http.HandleFunc("/happycat/getcatshopreward ", GetCatShopReward) //请求点击猫箱子
194 http.HandleFunc("/happycat/acclectecatstory ", AcclecteCatStory) //请求点击猫箱子 197 http.HandleFunc("/happycat/acclectecatstory ", AcclecteCatStory) //请求点击猫箱子
195 - http.HandleFunc("/chappycatat/updateuserinfo ", UpdateUserInfo) //请求点击猫箱子 198 + http.HandleFunc("/chappycatat/updateuserinfo ", UpdateUserInfo) //请求点击猫箱子
196 http.HandleFunc("/happycat/queryplayerrank ", QueryPlayerRank) //请求点击猫箱子 199 http.HandleFunc("/happycat/queryplayerrank ", QueryPlayerRank) //请求点击猫箱子
197 http.HandleFunc("/happycat/querycompletetask ", QueryCompleteTask) //请求点击猫箱子 200 http.HandleFunc("/happycat/querycompletetask ", QueryCompleteTask) //请求点击猫箱子
198 http.HandleFunc("/happycat/querycompleteachievement ", QueryCompleteAchievement) //请求点击猫箱子 201 http.HandleFunc("/happycat/querycompleteachievement ", QueryCompleteAchievement) //请求点击猫箱子
199 http.HandleFunc("/happycat/gettaskreward ", GetTaskReward) //请求点击猫箱子 202 http.HandleFunc("/happycat/gettaskreward ", GetTaskReward) //请求点击猫箱子
200 http.HandleFunc("/happycat/getachievereward ", GetAchieveReward) //请求点击猫箱子 203 http.HandleFunc("/happycat/getachievereward ", GetAchieveReward) //请求点击猫箱子
201 http.HandleFunc("/happycat/startonlinetask ", StartOnlineTask) //请求开始在线时长任务 204 http.HandleFunc("/happycat/startonlinetask ", StartOnlineTask) //请求开始在线时长任务
202 - http.HandleFunc("/happycat/getofflinereward ", GetOfflineReward) //请求开始在线时长任务 205 + //http.HandleFunc("/happycat/getofflinereward ", GetOfflineReward) //请求开始在线时长任务
203 206
204 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) 207 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil)
205 CheckErr(err) 208 CheckErr(err)
@@ -208,7 +211,7 @@ func startServerHttpServe() { @@ -208,7 +211,7 @@ func startServerHttpServe() {
208 func GetOfflineReward(w http.ResponseWriter, r *http.Request) { 211 func GetOfflineReward(w http.ResponseWriter, r *http.Request) {
209 Uuid := 0 212 Uuid := 0
210 if len(r.Header) > 0 { 213 if len(r.Header) > 0 {
211 - Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) 214 + Uuid, _ = strconv.Atoi(r.Header.Get("uid"))
212 } 215 }
213 if Uuid == 0 { 216 if Uuid == 0 {
214 SetHeader(w) 217 SetHeader(w)
@@ -220,7 +223,7 @@ func GetOfflineReward(w http.ResponseWriter, r *http.Request) { @@ -220,7 +223,7 @@ func GetOfflineReward(w http.ResponseWriter, r *http.Request) {
220 s := string(result) 223 s := string(result)
221 logger.Info("GetOfflineReward , body:%v,uuid=%v", s, Uuid) 224 logger.Info("GetOfflineReward , body:%v,uuid=%v", s, Uuid)
222 225
223 - //HandlerGetOfflineReward(w, s, Uuid) 226 + HandlerGetOfflineReward(w, s, Uuid)
224 } 227 }
225 228
226 func StartOnlineTask(w http.ResponseWriter, r *http.Request) { 229 func StartOnlineTask(w http.ResponseWriter, r *http.Request) {
@@ -334,7 +337,7 @@ func UpdateUserInfo(w http.ResponseWriter, r *http.Request) { @@ -334,7 +337,7 @@ func UpdateUserInfo(w http.ResponseWriter, r *http.Request) {
334 func QueryPlayerRank(w http.ResponseWriter, r *http.Request) { 337 func QueryPlayerRank(w http.ResponseWriter, r *http.Request) {
335 Uuid := 0 338 Uuid := 0
336 if len(r.Header) > 0 { 339 if len(r.Header) > 0 {
337 - Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) 340 + Uuid, _ = strconv.Atoi(r.Header.Get("uid"))
338 } 341 }
339 if Uuid == 0 { 342 if Uuid == 0 {
340 SetHeader(w) 343 SetHeader(w)
@@ -346,7 +349,7 @@ func QueryPlayerRank(w http.ResponseWriter, r *http.Request) { @@ -346,7 +349,7 @@ func QueryPlayerRank(w http.ResponseWriter, r *http.Request) {
346 s := string(result) 349 s := string(result)
347 logger.Info("QueryPlayerRank , body:%v,uuid=%v", s, Uuid) 350 logger.Info("QueryPlayerRank , body:%v,uuid=%v", s, Uuid)
348 351
349 - //HandlerQueryPlayerRank(w, s, Uuid) 352 + HandlerQueryPlayerRank(w, s, Uuid)
350 } 353 }
351 354
352 func AcclecteCatStory(w http.ResponseWriter, r *http.Request) { 355 func AcclecteCatStory(w http.ResponseWriter, r *http.Request) {
@@ -550,7 +553,7 @@ func TakeCatoutfromWareHouse(w http.ResponseWriter, r *http.Request) { @@ -550,7 +553,7 @@ func TakeCatoutfromWareHouse(w http.ResponseWriter, r *http.Request) {
550 func DoBuyCat(w http.ResponseWriter, r *http.Request) { 553 func DoBuyCat(w http.ResponseWriter, r *http.Request) {
551 Uuid := 0 554 Uuid := 0
552 if len(r.Header) > 0 { 555 if len(r.Header) > 0 {
553 - Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) 556 + Uuid, _ = strconv.Atoi(r.Header.Get("uid"))
554 } 557 }
555 if Uuid == 0 { 558 if Uuid == 0 {
556 SetHeader(w) 559 SetHeader(w)
@@ -562,7 +565,7 @@ func DoBuyCat(w http.ResponseWriter, r *http.Request) { @@ -562,7 +565,7 @@ func DoBuyCat(w http.ResponseWriter, r *http.Request) {
562 s := string(result) 565 s := string(result)
563 logger.Info("DoBuyCat , body:%v,uuid=%v", s, Uuid) 566 logger.Info("DoBuyCat , body:%v,uuid=%v", s, Uuid)
564 567
565 - //HandlerDoBuyCat(w, s, Uuid) 568 + HandlerDoBuyCat(w, s, Uuid)
566 } 569 }
567 570
568 func QueryBuyCat(w http.ResponseWriter, r *http.Request) { 571 func QueryBuyCat(w http.ResponseWriter, r *http.Request) {
@@ -616,7 +619,7 @@ func AutoMerge(w http.ResponseWriter, r *http.Request) { @@ -616,7 +619,7 @@ func AutoMerge(w http.ResponseWriter, r *http.Request) {
616 s := string(result) 619 s := string(result)
617 logger.Info("AutoMerge , body:%v,uuid=%v", s, Uuid) 620 logger.Info("AutoMerge , body:%v,uuid=%v", s, Uuid)
618 621
619 -// HandlerAutoMerge(w, s, Uuid) 622 + // HandlerAutoMerge(w, s, Uuid)
620 } 623 }
621 624
622 func ClickCatBox(w http.ResponseWriter, r *http.Request) { 625 func ClickCatBox(w http.ResponseWriter, r *http.Request) {
@@ -652,7 +655,7 @@ func GenerateBox(w http.ResponseWriter, r *http.Request) { @@ -652,7 +655,7 @@ func GenerateBox(w http.ResponseWriter, r *http.Request) {
652 s := string(result) 655 s := string(result)
653 logger.Info("GenerateBox , body:%v,uuid=%v", s, Uuid) 656 logger.Info("GenerateBox , body:%v,uuid=%v", s, Uuid)
654 657
655 -// HandlerGenerateBox(w, s, Uuid) 658 + // HandlerGenerateBox(w, s, Uuid)
656 } 659 }
657 660
658 func UpgradeCatBox(w http.ResponseWriter, r *http.Request) { 661 func UpgradeCatBox(w http.ResponseWriter, r *http.Request) {
@@ -670,7 +673,7 @@ func UpgradeCatBox(w http.ResponseWriter, r *http.Request) { @@ -670,7 +673,7 @@ func UpgradeCatBox(w http.ResponseWriter, r *http.Request) {
670 s := string(result) 673 s := string(result)
671 logger.Info("UpgradeCatBox , body:%v,uuid=%v", s, Uuid) 674 logger.Info("UpgradeCatBox , body:%v,uuid=%v", s, Uuid)
672 675
673 -// HandlerUpgradeCatBox(w, s, Uuid) 676 + // HandlerUpgradeCatBox(w, s, Uuid)
674 } 677 }
675 678
676 func AcclecteBoxRate(w http.ResponseWriter, r *http.Request) { 679 func AcclecteBoxRate(w http.ResponseWriter, r *http.Request) {
@@ -688,7 +691,7 @@ func AcclecteBoxRate(w http.ResponseWriter, r *http.Request) { @@ -688,7 +691,7 @@ func AcclecteBoxRate(w http.ResponseWriter, r *http.Request) {
688 s := string(result) 691 s := string(result)
689 logger.Info("AcclecteBoxRate , body:%v,uuid=%v", s, Uuid) 692 logger.Info("AcclecteBoxRate , body:%v,uuid=%v", s, Uuid)
690 693
691 -// HandlerAcclecteBoxRate(w, s, Uuid) 694 + // HandlerAcclecteBoxRate(w, s, Uuid)
692 } 695 }
693 696
694 func AcclecteGold(w http.ResponseWriter, r *http.Request) { 697 func AcclecteGold(w http.ResponseWriter, r *http.Request) {
@@ -706,7 +709,7 @@ func AcclecteGold(w http.ResponseWriter, r *http.Request) { @@ -706,7 +709,7 @@ func AcclecteGold(w http.ResponseWriter, r *http.Request) {
706 s := string(result) 709 s := string(result)
707 logger.Info("AcclecteGold , body:%v,uuid=%v", s, Uuid) 710 logger.Info("AcclecteGold , body:%v,uuid=%v", s, Uuid)
708 711
709 -// HandlerAcclecteGold(w, s, Uuid) 712 + // HandlerAcclecteGold(w, s, Uuid)
710 } 713 }
711 714
712 func ExchangePos(w http.ResponseWriter, r *http.Request) { 715 func ExchangePos(w http.ResponseWriter, r *http.Request) {
@@ -730,7 +733,7 @@ func ExchangePos(w http.ResponseWriter, r *http.Request) { @@ -730,7 +733,7 @@ func ExchangePos(w http.ResponseWriter, r *http.Request) {
730 func GetUserData(w http.ResponseWriter, r *http.Request) { 733 func GetUserData(w http.ResponseWriter, r *http.Request) {
731 Uuid := 0 734 Uuid := 0
732 if len(r.Header) > 0 { 735 if len(r.Header) > 0 {
733 - Uuid, _ = strconv.Atoi(r.Header.Get("Uuid")) 736 + Uuid, _ = strconv.Atoi(r.Header.Get("uid"))
734 } 737 }
735 if Uuid == 0 { 738 if Uuid == 0 {
736 SetHeader(w) 739 SetHeader(w)
@@ -742,7 +745,7 @@ func GetUserData(w http.ResponseWriter, r *http.Request) { @@ -742,7 +745,7 @@ func GetUserData(w http.ResponseWriter, r *http.Request) {
742 s := string(result) 745 s := string(result)
743 logger.Info("GetUserData , body:%v,uuid=%v", s, Uuid) 746 logger.Info("GetUserData , body:%v,uuid=%v", s, Uuid)
744 747
745 - //HandlerGetUserData(w, s, Uuid) 748 + HandlerGetUserData(w, s, Uuid)
746 } 749 }
747 750
748 func UserLogin(w http.ResponseWriter, r *http.Request) { 751 func UserLogin(w http.ResponseWriter, r *http.Request) {
@@ -762,22 +765,22 @@ func UserLogin(w http.ResponseWriter, r *http.Request) { @@ -762,22 +765,22 @@ func UserLogin(w http.ResponseWriter, r *http.Request) {
762 } 765 }
763 766
764 /*if Uuid == 0 { 767 /*if Uuid == 0 {
765 - SetHeader(w)  
766 - /*var resp UserLoginResp  
767 - resp.Code = -1  
768 - resp.Message = "uuid is nil"  
769 - respstr, _ := json.Marshal(&resp)  
770 - fmt.Fprint(w, string(respstr))  
771 - logger.Error("UserLogin uuid=0! failed!")*/  
772 - //return 768 + SetHeader(w)
  769 + /*var resp UserLoginResp
  770 + resp.Code = -1
  771 + resp.Message = "uuid is nil"
  772 + respstr, _ := json.Marshal(&resp)
  773 + fmt.Fprint(w, string(respstr))
  774 + logger.Error("UserLogin uuid=0! failed!")*/
  775 + //return
773 //} 776 //}
774 result, _ := ioutil.ReadAll(r.Body) 777 result, _ := ioutil.ReadAll(r.Body)
775 r.Body.Close() 778 r.Body.Close()
776 779
777 s := string(result) 780 s := string(result)
778 - logger.Info("UserLogin , body:%v,uuid=%v token=%v", s, Uuid,Token) 781 + logger.Info("UserLogin , body:%v,uuid=%v token=%v", s, Uuid, Token)
779 782
780 - HandlerLogin(w, s, Uuid,Token) 783 + HandlerLogin(w, s, Uuid, Token)
781 } 784 }
782 785
783 func ReviewAllianceHandler(w http.ResponseWriter, r *http.Request) { 786 func ReviewAllianceHandler(w http.ResponseWriter, r *http.Request) {
src/HttpServer/logic/logic.go
1 package logic 1 package logic
2 2
3 import ( 3 import (
  4 + "HttpServer/jsonconf"
4 "HttpServer/redishandler" 5 "HttpServer/redishandler"
5 "common/logger" 6 "common/logger"
6 "common/redis" 7 "common/redis"
@@ -9,11 +10,12 @@ import ( @@ -9,11 +10,12 @@ import (
9 "net/http" 10 "net/http"
10 "strconv" 11 "strconv"
11 "sync" 12 "sync"
  13 + "time"
12 ) 14 )
13 15
14 var ( 16 var (
15 //m_userInfo *beegomap.BeeMap //make(map[int32]*UserData 17 //m_userInfo *beegomap.BeeMap //make(map[int32]*UserData
16 - Maplock *sync.RWMutex 18 + Maplock *sync.RWMutex
17 ) 19 )
18 20
19 func init() { 21 func init() {
@@ -27,7 +29,7 @@ func SetHeader(w http.ResponseWriter) { @@ -27,7 +29,7 @@ func SetHeader(w http.ResponseWriter) {
27 w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid") 29 w.Header().Set("Access-Control-Allow-Headers", "Content-Type,Uuid")
28 } 30 }
29 31
30 -func HandlerLogin(w http.ResponseWriter, data string, uuid int,token string) { 32 +func HandlerLogin(w http.ResponseWriter, data string, uuid int, token string) {
31 SetHeader(w) 33 SetHeader(w)
32 var resp UserLoginResp 34 var resp UserLoginResp
33 resp.Code = 0 35 resp.Code = 0
@@ -52,7 +54,7 @@ func HandlerLogin(w http.ResponseWriter, data string, uuid int,token string) { @@ -52,7 +54,7 @@ func HandlerLogin(w http.ResponseWriter, data string, uuid int,token string) {
52 InitUserInfo(&rdata, &resp, rdata.UserId) 54 InitUserInfo(&rdata, &resp, rdata.UserId)
53 55
54 } else { 56 } else {
55 - uinfo,err := GetUserInfo(strconv.Itoa(rdata.UserId)) 57 + uinfo, err := GetUserInfo(strconv.Itoa(rdata.UserId))
56 if err != nil { 58 if err != nil {
57 logger.Info("GetUserInfo HandlerLogin data failed:%v,for:%v", err, data) 59 logger.Info("GetUserInfo HandlerLogin data failed:%v,for:%v", err, data)
58 resp.Message = "GetUserInfo failed" 60 resp.Message = "GetUserInfo failed"
@@ -70,11 +72,267 @@ func HandlerLogin(w http.ResponseWriter, data string, uuid int,token string) { @@ -70,11 +72,267 @@ func HandlerLogin(w http.ResponseWriter, data string, uuid int,token string) {
70 72
71 } 73 }
72 74
  75 + //回包
  76 + respstr, _ := json.Marshal(&resp)
  77 + fmt.Fprint(w, string(respstr))
  78 +
  79 + logger.Info("###HandlerLogin###rdata:%v", string(respstr))
  80 +}
  81 +
  82 +func HandlerDoBuyCat(w http.ResponseWriter, data string, uuid int) {
  83 + SetHeader(w)
  84 + var resp DoBuyCatResp
  85 + resp.Code = 0
  86 + resp.Message = "success"
  87 + var rdata DoBuyCatReq
  88 + err := json.Unmarshal([]byte(data), &rdata)
  89 + for {
  90 + if err != nil {
  91 + logger.Error("HandlerDoBuyCat json unmarshal failed=%v", err)
  92 + resp.Code = 1
  93 + resp.Message = "json failed"
  94 + break
  95 + }
  96 + uinfo, err := GetUserInfo(strconv.Itoa(uuid))
  97 + if err != nil || uinfo == nil {
  98 + logger.Error("HandlerDoBuyCat getuserinfo failed=%v", err)
  99 + resp.Code = 1
  100 + resp.Message = "get userinfo failed"
  101 + break
  102 + }
  103 +
  104 + maxlv := uinfo.Highestlv - 5
  105 + if maxlv < 1 {
  106 + //最小1j
  107 + maxlv = 1
  108 + }
  109 + if rdata.CatId > maxlv || rdata.CatId < 1 || rdata.CatId > len(uinfo.BuyCatInfo) {
  110 + logger.Error("HandlerDoBuyCat buy lv failed=%v", err)
  111 + resp.Code = 1
  112 + resp.Message = "buy lv invalid"
  113 + break
  114 + }
  115 +
  116 + curprice := uinfo.BuyCatInfo[rdata.CatId-1].CurPrice
  117 + if uinfo.Gold < curprice {
  118 + logger.Error("HandlerDoBuyCat gold not enough failed=%v", err)
  119 + resp.Code = 1
  120 + resp.Message = "gold not enough"
  121 + break
  122 + }
  123 +
  124 + //获取配置
  125 + catcfg := jsonconf.GetCatConfig(rdata.CatId)
  126 + if catcfg == nil {
  127 + logger.Error("HandlerDoBuyCat get cat cfg failed=%v,lv=%v", err, rdata.CatId)
  128 + resp.Code = 1
  129 + resp.Message = "get cat cfg failed"
  130 + break
  131 + }
  132 +
  133 + //需要找到一个位置
  134 + catpos := getCatPutPos(uinfo, rdata.CatId)
  135 + if catpos < 0 {
  136 + logger.Error("HandlerDoBuyCat not enough place failed=%v", err)
  137 + resp.Code = 1
  138 + resp.Message = "not enough place"
  139 + break
  140 + }
  141 + //扣钱
  142 + uinfo.Gold -= curprice
  143 +
  144 + //重新计算价格
  145 + if uinfo.BuyCatInfo[rdata.CatId-1].IsMaxBuytime == 0 {
  146 + uinfo.BuyCatInfo[rdata.CatId-1].CurPrice = int64(float64(uinfo.BuyCatInfo[rdata.CatId-1].CurPrice) * float64(catcfg.Ratio))
  147 + uinfo.BuyCatInfo[rdata.CatId-1].Buytime++
  148 + if uinfo.BuyCatInfo[rdata.CatId-1].Buytime >= catcfg.Increse_limit {
  149 + uinfo.BuyCatInfo[rdata.CatId-1].IsMaxBuytime = 1
  150 + }
  151 + }
  152 +
  153 + //需要重新计算速率
  154 + uinfo.CalcGoldRate()
  155 +
  156 + resp.Data.Price = strconv.FormatInt(uinfo.BuyCatInfo[rdata.CatId-1].CurPrice, 10)
  157 + resp.Data.Position = catpos
  158 + resp.Data.Coin.UserId = uuid
  159 + resp.Data.Coin.Coin = strconv.FormatInt(uinfo.Gold, 10)
  160 + resp.Data.Coin.IcomeRate = strconv.FormatInt(uinfo.Goldrate, 10)
  161 + resp.Data.Coin.UpdateTime = int(time.Now().Unix())
  162 +
  163 + resp.Code = 0
73 164
  165 + //保存
  166 + SaveUserInfo(uinfo, strconv.Itoa(uuid))
74 167
  168 + break
  169 +
  170 + }
75 //回包 171 //回包
76 respstr, _ := json.Marshal(&resp) 172 respstr, _ := json.Marshal(&resp)
77 fmt.Fprint(w, string(respstr)) 173 fmt.Fprint(w, string(respstr))
  174 +}
78 175
79 - logger.Info("###HandlerLogin###rdata:%v", string(respstr))  
80 -}  
81 \ No newline at end of file 176 \ No newline at end of file
  177 +func HandlerGetUserData(w http.ResponseWriter, data string, uuid int) {
  178 + SetHeader(w)
  179 + var resp GetUserDataResp
  180 + resp.Code = 0
  181 + resp.Message = "success"
  182 +
  183 + for {
  184 + v, err := redishandler.GetRedisClient().HGet(redis.USER_LAST_CALC_TIME, strconv.Itoa(uuid))
  185 + if err != nil {
  186 + logger.Info("CalcOfflineData get USER_LAST_CALC_TIME failed=%v", err)
  187 + resp.Message = "redishandler failed"
  188 + resp.Code = 1
  189 + break
  190 + }
  191 +
  192 + lasttime, _ := strconv.Atoi(v)
  193 + nowtime := time.Now().Unix()
  194 + if nowtime-int64(lasttime) < 0 {
  195 + logger.Error("HandlerGetUserData nowtime=%v lasttime=%v", nowtime, lasttime)
  196 + resp.Message = "request time small than zero"
  197 + resp.Code = 1
  198 + break
  199 + }
  200 + uinfo, err := GetUserInfo(strconv.Itoa(uuid))
  201 + if err != nil || uinfo == nil {
  202 + logger.Error("HandlerGetUserData getuserinfo failed=%v", err)
  203 + resp.Code = 1
  204 + resp.Message = "get userinfo failed"
  205 + break
  206 + }
  207 +
  208 + if nowtime-int64(lasttime) > 5*60 {
  209 + //算离线收益
  210 + resp.Data.TimingReward = false
  211 + offsec := nowtime - int64(lasttime)
  212 + if offsec > 2*3600 {
  213 + offsec = 2 * 3600
  214 + }
  215 +
  216 + uinfo.OfflineGold = offsec * uinfo.Goldrate
  217 + resp.Data.Coin = strconv.FormatInt(uinfo.Gold, 10)
  218 + resp.Data.Now = int(time.Now().Unix())
  219 + resp.Data.Output = "0"
  220 + resp.Data.OfflineReward.OfflineTime = int(offsec)
  221 + resp.Data.OfflineReward.Income = strconv.FormatInt(uinfo.OfflineGold, 10)
  222 + } else {
  223 + //按费离线收益计算
  224 + offsec := nowtime - int64(lasttime)
  225 + resp.Data.TimingReward = true
  226 + resp.Data.Now = int(time.Now().Unix())
  227 + addgold := uinfo.Goldrate * offsec
  228 + uinfo.Gold = addgold
  229 + uinfo.GoldSum += addgold
  230 + uinfo.AddToRank()
  231 + resp.Data.Output = strconv.FormatInt(addgold, 10)
  232 + resp.Data.Coin = strconv.FormatInt(uinfo.Gold, 10)
  233 + }
  234 +
  235 + //保存此次计算时间
  236 + nowtimestr := strconv.FormatInt(nowtime, 10)
  237 + redishandler.GetRedisClient().HSet(redis.USER_LAST_CALC_TIME, strconv.Itoa(uuid), nowtimestr)
  238 + logger.Info("HandlerGetUserData save USER_LAST_CALC_TIME time=%v", nowtimestr)
  239 +
  240 + break
  241 + }
  242 +
  243 + //回包
  244 + respstr, _ := json.Marshal(&resp)
  245 + fmt.Fprint(w, string(respstr))
  246 +}
  247 +
  248 +func HandlerGetOfflineReward(w http.ResponseWriter, data string, uuid int) {
  249 + SetHeader(w)
  250 + var resp GetOfflineRewardResp
  251 + resp.Code = 0
  252 + resp.Message = "success"
  253 + var rdata GetOfflineRewardReq
  254 +
  255 + err := json.Unmarshal([]byte(data), &rdata)
  256 + for {
  257 + if err != nil {
  258 + logger.Error("HandlerGetOfflineReward json unmarshal failed=%v", err)
  259 + resp.Code = 1
  260 + resp.Message = "json failed"
  261 + break
  262 + }
  263 +
  264 + uinfo, err := GetUserInfo(strconv.Itoa(uuid))
  265 + if err != nil || uinfo == nil {
  266 + logger.Error("HandlerGetUserData getuserinfo failed=%v", err)
  267 + resp.Code = 1
  268 + resp.Message = "get userinfo failed"
  269 + break
  270 + }
  271 +
  272 + addgold := uinfo.OfflineGold
  273 +
  274 + if rdata.Optype == 2 {
  275 + addgold *= 2
  276 +
  277 + }
  278 + uinfo.Gold += addgold
  279 + uinfo.GoldSum += addgold
  280 + uinfo.AddToRank()
  281 +
  282 + //此处todo 记录离线领取的次数
  283 +
  284 + //领取过后将离线金币清零
  285 + uinfo.OfflineGold = 0
  286 +
  287 + //保存
  288 + SaveUserInfo(uinfo, strconv.Itoa(uuid))
  289 +
  290 + resp.Code = 0
  291 + break
  292 + }
  293 +
  294 + //回包
  295 + respstr, _ := json.Marshal(&resp)
  296 + fmt.Fprint(w, string(respstr))
  297 +}
  298 +
  299 +func HandlerQueryPlayerRank(w http.ResponseWriter, data string, uuid int) {
  300 + SetHeader(w)
  301 + var resp QueryPlayerRankResp
  302 + resp.Code = 0
  303 + resp.Message = "success"
  304 + for {
  305 + //取100名
  306 + vv, err := redishandler.GetRedisClient().ZRevRangewithIndex(redis.USER_GOLD_RANK, 0, 99)
  307 + if err == nil {
  308 + rank := 0
  309 + for _, v := range vv {
  310 + rank++
  311 + //logger.Info("TestMyredis k=%v,v=%v", k, v)
  312 + rinfobyte, _ := v.(string)
  313 + ruid, _ := strconv.Atoi(rinfobyte)
  314 + rindo, err := GetUserInfo(rinfobyte)
  315 + if err == nil && rindo != nil {
  316 + var tmp RankInfoDesc
  317 + tmp.UserId = ruid
  318 + tmp.Income = rindo.GoldSum
  319 + tmp.Nickname = rindo.NickName
  320 + tmp.Headurl = rindo.Head
  321 + tmp.Rank = rank
  322 + tmp.CatName = rindo.CalcHigestCatName()
  323 + resp.Data = append(resp.Data, tmp)
  324 + }
  325 + }
  326 + } else {
  327 + logger.Error("HandlerUpdateUserInfo redisfailed ")
  328 + resp.Code = 1
  329 + resp.Message = "redisfailed"
  330 + break
  331 + }
  332 + resp.Code = 0
  333 + break
  334 + }
  335 +
  336 + //回包
  337 + respstr, _ := json.Marshal(&resp)
  338 + fmt.Fprint(w, string(respstr))
  339 +}