logic.go
3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
package logic
import (
"HttpServer/redishandler"
"common/logger"
"common/redis"
"encoding/json"
"fmt"
"net/http"
"strconv"
"time"
)
func HandlerLogin(w http.ResponseWriter, data string, uuid int) {
SetHeader(w)
var resp UserLoginResp
resp.Code = 0
var rdata UserLoginReq
err := json.Unmarshal([]byte(data), &rdata)
for {
if err != nil {
logger.Info("json decode HandlerLogin data failed:%v,for:%v", err, data)
resp.Message = "json解析错误"
resp.Code = 1
break
}
//需要加上渠道才是唯一的玩家id,不同渠道视为不同数据
uniqueuuid := strconv.Itoa(uuid) + rdata.Channel
//此处需要做一下数据兼容 先判断uuid+channel的key是否存在
//先判断一下是否是新用户
isexist, err := redishandler.GetRedisClient().HExists(redis.USER_DATA_KEY, uniqueuuid)
if err != nil {
logger.Error("redis failed err=%v", err)
resp.Message = "服务器错误"
resp.Code = 1
break
}
if !isexist {
//不存在
//不存在老的数据 之间走新号流程
err = InitUserInfo(&rdata, &resp, uuid, uniqueuuid)
} else {
//已经迁移过的数据之间返回
//已经登陆过了 需要获取玩家数据
err = GetUserData(uuid, uniqueuuid, &rdata, &resp)
}
if err != nil {
logger.Error("redis failed err=%v", err)
resp.Message = "服务器错误"
resp.Code = 1
break
}
resp.Code = 0
break
}
//回包
respstr, _ := json.Marshal(&resp)
fmt.Fprint(w, string(respstr))
logger.Info("###HandlerLogin###rdata:%v", string(respstr))
}
func (u *UserData) HandlePassDay(uuid int, channel string) {
isdiffday := false
nowtime := time.Now()
lasttime := time.Unix(int64(u.LastLoginTime), 0)
nowdaynum := time.Now().Day()
lastdaynum := time.Unix(int64(u.LastLoginTime), 0).Day()
nowtimestamp := time.Date(nowtime.Year(), nowtime.Month(), nowtime.Day(), 0, 0, 0, 0, nowtime.Location())
lasttimestamp := time.Date(lasttime.Year(), lasttime.Month(), lasttime.Day(), 0, 0, 0, 0, lasttime.Location())
logger.Info("HandlePassDay lasttime=%v,lasttimestamp=%v", lasttime, lasttimestamp)
if nowdaynum == lastdaynum {
//同一天
if int64(u.LastLoginTime)-time.Now().Unix() > 86400 {
//已经过了很多天了
//u.LastLoginTime = int(time.Now().Unix())
u.ContinueLoginDay = 1
isdiffday = true
} else {
//t同一天 不做处理
}
} else {
//不是同一天了
isdiffday = true
if nowtimestamp.Unix() != lasttimestamp.Unix()+86400 {
//超过一天了
u.ContinueLoginDay = 1
} else {
u.ContinueLoginDay++
}
logger.Info("HandlePassDay now=%v,last=%v", nowtimestamp.Unix(), lasttimestamp.Unix())
}
if isdiffday {
//跨天了
u.SumLoginDay++
u.WatchAddsTime = WATCH_ADD_DAY_LIMIT
//todo 重置任务相关的数据
u.GetFromGuanCnt = 0
u.GetCashCnt = 0
//签到数据处理
u.IsSignToday = 0
if u.SignSum >= 7 {
//进入新的一轮
u.SignSum = 0
u.SignRound++
}
}
u.LastLoginTime = int(nowtime.Unix())
uniqueid := strconv.Itoa(uuid) + channel
SaveUserInfo(u, uniqueid)
}
func GetUserData(uuid int, uniqueuid string, req *UserLoginReq, resp *UserLoginResp) error {
data, err := GetUserInfo(uniqueuid)
if err != nil || data == nil {
resp.Code = 1
resp.Message = "ERROR_SRV_ERROR"
return err
}
//此处要处理一下跨天逻辑
data.HandlePassDay(uuid, req.Channel)
//需要处理下提现表信息 等待提现表
err = data.ReInitWithDraw(uniqueuid)
if err != nil {
logger.Error("GetUserData ReInitWithDraw err=%v", err)
}
//此处处理一下从sdk拉取钱包金币数量
gold, err := GetCoinFromSdk(uuid, req.Gameid, req.Channel)
if err == nil {
data.RealGold = gold
} else {
logger.Error("GetCoinFromSdk err=%v", err)
}
SaveUserInfo(data, uniqueuid)
resp.Data.Walletgold = data.RealGold
resp.Data.Leftredbagcnt = data.WatchAddsTime
return nil
}