serve.go
9.51 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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
package logic
import (
"World/clubmgr"
"World/common"
"World/conf"
"World/db"
"World/pb"
pmgr "World/playermgr"
"World/utils"
"common/logger"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
)
var ch chan *ClubGrantFundData
func StartHttpServe() {
startServerHttpServe()
}
func CheckErr(err error) {
if err != nil {
panic(err)
}
}
func startServerHttpServe() {
http.HandleFunc("/reviewalliance", ReviewAllianceHandler)
http.HandleFunc("/clubgrantfund", ClubGrantFundHandler)
http.HandleFunc("/clubincometransfer", ClubIncomeTransferHandler)
http.HandleFunc("/allianceincometransfer", AllianceIncomeTransferHandler)
http.HandleFunc("/rechagregold", RechargeGoldHandler)
err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil)
CheckErr(err)
}
func ClubGrantFundHandler(w http.ResponseWriter, r *http.Request) {
defer utils.PrintPanicStack()
result, _ := ioutil.ReadAll(r.Body)
r.Body.Close()
s := string(result)
logger.Info("ClubGrantFundHandler handler, body:%v", s)
HandleClubGrantFund(s)
fmt.Fprint(w, "Success!")
}
type ClubGrantFundData struct {
OpPlayerId uint32 `json:"op_player_id"`
ClubId uint32 `json:"club_id"`
TargetId uint32 `json:"target_id"`
Amount int64 `json:"amount"`
}
func HandleClubGrantFund(data string) {
var cdata ClubGrantFundData
err := json.Unmarshal([]byte(data), &cdata)
if err != nil {
logger.Info("json decode ClubGrantFundData data failed:%v", err, " for:%v", data)
return
}
logger.Info("###HandleClubGrantFund###cdata:", cdata)
var player *common.GamePlayer = nil
var err_num common.ErrorType = common.Error_OK
for {
var er error = nil
player, er = pmgr.GetPlayerFromMap(cdata.OpPlayerId)
if er != nil {
err_num = common.Error_Player_Not_Found
logger.Notic("get player uid:%v failed for%v", cdata.OpPlayerId, err_num)
break
}
//请求者不是管理员也不是创建者则退出
if !clubmgr.HasPrivilege(cdata.ClubId, cdata.OpPlayerId) {
err_num = common.Error_Club_Privilege_Not_Enough
logger.Notic("HasPrivilege uid:%v for %v", cdata.OpPlayerId, err_num)
break
}
if cdata.Amount < 0 {
err_num = common.Error_Club_Other
logger.Notic("Amount invalid uid:%v failed:%v Amount:%v", cdata.OpPlayerId, err_num, cdata.Amount)
break
}
//转账者金币是否足够
curGoldNum, err := db.GetUserGoldNum(cdata.OpPlayerId)
if err != nil {
err_num = common.Error_Club_Other
logger.Notic("db.GetUserGoldNum failed err:%v", err)
break
}
if curGoldNum < cdata.Amount {
err_num = common.Error_Club_Fund_Not_Enough
logger.Notic("curGoldNum is not enough uid:%v failed:%v ClubId:%v Amount:%v", cdata.OpPlayerId, err_num, cdata.ClubId, cdata.Amount)
break
}
//做修改操作
err_num = clubmgr.DoGrantClubFundNew(cdata.ClubId, cdata.TargetId, cdata.Amount, cdata.OpPlayerId)
if err_num != common.Error_OK {
logger.Notic("DoGrantClubFund uid:%v failed:%v ClubId:%v TargetId:%v Amount:%v", cdata.OpPlayerId, err_num, cdata.ClubId, cdata.TargetId, cdata.Amount)
break
}
break
}
logger.Info("HandleClubGrantFund result uid:%v err_num:%v", cdata.OpPlayerId, err_num)
//通知客户的转账成功
var noti pb.ClubGrantFundNotice
noti.Error = int32(err_num)
noti.OpPlayerId = uint32(cdata.OpPlayerId)
noti.Clubid = uint32(cdata.ClubId)
noti.Targetid = uint32(cdata.TargetId)
noti.Amount = cdata.Amount
common.SendNoti(player, uint32(0), uint32(cdata.OpPlayerId), pb.MSGID_MsgID_ClubGrantFund_Notice, ¬i)
}
func ReviewAllianceHandler(w http.ResponseWriter, r *http.Request) {
defer utils.PrintPanicStack()
result, _ := ioutil.ReadAll(r.Body)
r.Body.Close()
s := string(result)
logger.Info("ReviewAllianceHandler , body:%v", s)
go HandleReviewedAlliance(s)
fmt.Fprint(w, "Success!")
}
type ReviewAllianceData struct {
AllianceId uint32 `json:"alliance_id"`
CreaterClubId uint32 `json:"creater_club_id"`
Reviewed int `json:"reviewed"`
Reason string `json:"reason"`
}
func HandleReviewedAlliance(data string) {
var rdata ReviewAllianceData
err := json.Unmarshal([]byte(data), &rdata)
if err != nil {
logger.Info("json decode ReviewAlliance data failed:%v", err, " for:%v", data)
return
}
logger.Info("###HandleGameData###rdata:", rdata)
if rdata.Reviewed == 1 {
db.ModifyAllianceStatus(rdata.AllianceId, rdata.Reviewed, rdata.Reason)
} else {
db.RemoveAllianceMember(rdata.CreaterClubId, rdata.AllianceId)
db.DeleteFromAlliance(rdata.AllianceId)
}
}
func ClubIncomeTransferHandler(w http.ResponseWriter, r *http.Request) {
defer utils.PrintPanicStack()
result, _ := ioutil.ReadAll(r.Body)
r.Body.Close()
s := string(result)
logger.Info("ClubIncomeTransferHandler, body:%v", s)
//go HandleClubIncomeTransfer(s)
err := HandleClubIncomeTransfer(s)
if err == nil {
fmt.Fprint(w, "Success!")
} else {
fmt.Fprint(w, "failed!")
}
}
type ClubIncomeTransferData struct {
UID uint32 `json:"uid"`
}
func HandleClubIncomeTransfer(data string) error {
var goldAfter int64 = 0
var rdata ClubIncomeTransferData
err := json.Unmarshal([]byte(data), &rdata)
if err != nil {
logger.Info("json decode ClubIncomeTransfer data failed:%v", err, " for:%v", data)
return err
}
logger.Info("###HandleClubIncomeTransfer###rdata:", rdata)
//取出来
db.ClubIncome_locker.Lock()
for {
if err = db.CheckAndLoadClubIncome(uint32(rdata.UID)); err != nil {
break
}
ccuidIncome, _ := db.GetClubIncome(int(rdata.UID))
if ccuidIncome == nil {
ccuidIncome = new(common.ClubCreaterIncomeInfo)
}
amount := int64(ccuidIncome.Total)
_, goldAfter, err = db.OperateRequesterGold(rdata.UID, amount, db.Add)
if err == nil {
ccuidIncome.Fee = 0
ccuidIncome.Insurance = 0
ccuidIncome.Jackpot = 0
ccuidIncome.Total -= amount
db.UpdateClubIncome(int(rdata.UID), ccuidIncome)
if err = db.SyncClubIncomeToDB(int(rdata.UID)); err != nil {
break
}
if err = db.RecordClubIncomeTransfer(rdata.UID, amount); err != nil {
logger.Notic("RecordClubIncomeTransfer failed uid:%v amount", rdata.UID, amount)
break
}
player, err := pmgr.GetPlayerFromMap(rdata.UID)
if err == nil {
common.SendGoldNumNotify(player, 0, uint32(rdata.UID), int64(goldAfter), int64(amount))
} else {
logger.Notic("Player not found uid:%v", rdata.UID)
}
} else {
logger.Warn("HandleClubIncomeTransfer Add gold failed uid:%v,err:%v", rdata.UID, err)
break
}
break
}
db.ClubIncome_locker.Unlock()
return err
}
func AllianceIncomeTransferHandler(w http.ResponseWriter, r *http.Request) {
log.Println("AllianceIncomeTransferHandler")
defer utils.PrintPanicStack()
result, _ := ioutil.ReadAll(r.Body)
r.Body.Close()
s := string(result)
logger.Info("AllianceIncomeTransferHandler, body:%v", s)
//go HandleAllianceIncomeTransfer(s)
HandleAllianceIncomeTransfer(s)
fmt.Fprint(w, "Success!")
}
type NotifyRechargeData struct {
PlayerId uint32 `json:"player_id"`
Amount int64 `json:"amount"`
}
func RechargeGoldHandler(w http.ResponseWriter, r *http.Request) {
logger.Info("RechargeGoldHandler!")
defer utils.PrintPanicStack()
result, _ := ioutil.ReadAll(r.Body)
r.Body.Close()
s := string(result)
err := HandleRechargeGold(s)
if err != nil {
fmt.Fprint(w, "Failed!")
} else {
fmt.Fprint(w, "Success!")
}
}
func HandleRechargeGold(data string) error {
var rdata NotifyRechargeData
err := json.Unmarshal([]byte(data), &rdata)
if err != nil {
logger.Info("json decode HandleRechargeGold data failed:%v", err, " for:%v", data)
return err
}
logger.Info("###HandleRechargeGold###rdata:", rdata)
var goldAfter int64 = 0
_, goldAfter, err = db.OperateRequesterGold(rdata.PlayerId, rdata.Amount, db.Add)
if err == nil {
player, er := pmgr.GetPlayerFromMap(rdata.PlayerId)
if er == nil && player != nil {
//通知客户的转账成功
var noti pb.NoticeNotifyUserGoldNum
noti.Uid = uint32(rdata.PlayerId)
noti.GoldNum = int64(goldAfter)
common.SendNoti(player, uint32(0), uint32(rdata.PlayerId), pb.MSGID_MsgID_NotifyUserGoldNum_Notice, ¬i)
}
}
return err
}
type AllianceIncomeTransferData struct {
UID uint32 `json:"uid"`
}
func HandleAllianceIncomeTransfer(data string) {
var goldAfter int64 = 0
var rdata AllianceIncomeTransferData
err := json.Unmarshal([]byte(data), &rdata)
if err != nil {
logger.Info("json decode AllianceIncomeTransfer data failed:%v", err, " for:%v", data)
return
}
logger.Info("###HandleAllianceIncomeTransfer###rdata:", rdata)
//取出来
db.AlliIncome_locker.Lock()
for {
if err = db.CheckAndLoadAlliIncome(uint32(rdata.UID)); err != nil {
break
}
acuidIncome, _ := db.GetAlliIncome(int(rdata.UID))
if acuidIncome == nil {
acuidIncome = new(common.AlliCreaterIncomeInfo)
}
amount := int64(acuidIncome.Total)
_, goldAfter, err = db.OperateRequesterGold(rdata.UID, amount, db.Add)
if err == nil {
acuidIncome.Fee = 0
acuidIncome.Insurance = 0
acuidIncome.Jackpot = 0
acuidIncome.Total -= amount
db.UpdateAlliIncome(int(rdata.UID), acuidIncome)
if err = db.SyncAlliIncomeToDB(int(rdata.UID)); err != nil {
break
}
if err = db.RecordAlliIncomeTransfer(rdata.UID, amount); err != nil {
break
}
player, err := pmgr.GetPlayerFromMap(rdata.UID)
if err == nil {
common.SendGoldNumNotify(player, 0, uint32(rdata.UID), int64(goldAfter), int64(amount))
logger.Info("HandleAllianceIncomeTransfer SendGoldNumNotify uid:%v", rdata.UID)
} else {
logger.Notic("Player not found uid:%v", rdata.UID)
}
} else {
logger.Notic("HandleAllianceIncomeTransfer Add gold failed uid:%v,err:%v", rdata.UID, err)
break
}
break
}
db.AlliIncome_locker.Unlock()
}