github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/game/internal/handler.go (about) 1 package internal 2 3 import ( 4 "common" 5 "conf" 6 "encoding/json" 7 "fmt" 8 "game/circle" 9 "math/rand" 10 "msg" 11 "reflect" 12 "strings" 13 "time" 14 15 "gopkg.in/mgo.v2/bson" 16 17 "github.com/name5566/leaf/gate" 18 "github.com/name5566/leaf/log" 19 ) 20 21 func init() { 22 handler(&msg.C2S_SetSystemOn{}, handleSetSystemOn) 23 handler(&msg.C2S_SetUsernamePassword{}, handleSetUsernamePassword) 24 handler(&msg.C2S_SetLandlordConfig{}, handleSetLandlordConfig) 25 handler(&msg.C2S_TransferChips{}, handleTransferChips) 26 handler(&msg.C2S_SetUserRole{}, handleSetUserRole) 27 28 handler(&msg.C2S_Heartbeat{}, handleHeartbeat) 29 //创建斗地主私人房 30 handler(&msg.C2S_CreateLandlordRoom{}, handleCreateLandlordRoom) 31 //加入斗地主房间 32 handler(&msg.C2S_EnterRoom{}, handleEnterRoom) 33 handler(&msg.C2S_GetUserChips{}, handleGetUserChips) 34 handler(&msg.C2S_SetVIPRoomChips{}, handleSetVIPRoomChips) 35 handler(&msg.C2S_GetAllPlayers{}, handleGetAllPlayers) 36 handler(&msg.C2S_ExitRoom{}, handleExitRoom) 37 handler(&msg.C2S_LandlordPrepare{}, handleLandlordPrepare) 38 handler(&msg.C2S_LandlordMatching{}, handleLandlordMatching) 39 handler(&msg.C2S_LandlordBid{}, handleLandlordBid) 40 handler(&msg.C2S_LandlordGrab{}, handleLandlordGrab) 41 handler(&msg.C2S_LandlordDouble{}, handleLandlordDouble) 42 handler(&msg.C2S_LandlordShowCards{}, handleLandlordShowCards) 43 handler(&msg.C2S_LandlordDiscard{}, handleLandlordDiscard) 44 handler(&msg.C2S_GetMonthChipsRank{}, handleMonthChipsRank) 45 handler(&msg.C2S_GetMonthChipsRankPos{}, handleMonthChipsRankPos) 46 handler(&msg.C2S_GetMonthWinsRank{}, handleMonthWinsRank) 47 handler(&msg.C2S_GetMonthWinsRankPos{}, handleMonthWinsRankPos) 48 handler(&msg.C2S_CleanMonthRanks{}, handleCleanMonthRanks) 49 handler(&msg.C2S_SystemHost{}, handleSystemHost) 50 handler(&msg.C2S_ChangeTable{}, handleChangeTable) 51 handler(&msg.C2S_GetRedPacketMatchRecord{}, handleGetRedPacketMatchRecord) 52 handler(&msg.C2S_TakeRedPacketMatchPrize{}, handleTakeRedPacketMatchPrize) 53 handler(&msg.C2S_DoTask{}, handleDoTask) 54 handler(&msg.C2S_ChangeTask{}, handleChangeTask) 55 handler(&msg.C2S_FreeChangeCountDown{}, handleFreeChangeCountDown) 56 handler(&msg.C2S_TakeTaskPrize{}, handleTakeTaskPrize) 57 handler(&msg.C2S_FakeWXPay{}, handleFakeWXPay) 58 handler(&msg.C2S_FakeAliPay{}, handleFakeAliPay) 59 handler(&msg.C2S_GetCircleLoginCode{}, handleGetCircleLoginCode) 60 61 handler(&msg.C2S_SetRobotData{}, handleSetRobotData) 62 handler(&msg.C2S_TakeTaskState{}, handleTaskState) 63 handler(&msg.C2S_GetShareTaskInfo{}, handleShareTasks) 64 handler(&msg.C2S_GetRedpacketTaskCode{}, handleRedpacktTaskCode) 65 handler(&msg.C2S_SubsidyChip{}, handleSubsidyChip) 66 handler(&msg.C2S_IsExistSubsidy{}, handleIsExistSubsidy) 67 handler(&msg.C2S_DailySign{}, handleDailySign) 68 handler(&msg.C2S_ShareInfo{}, handleShareInfo) 69 } 70 71 func handler(m interface{}, h interface{}) { 72 skeleton.RegisterChanRPC(reflect.TypeOf(m), h) 73 } 74 75 func handleSetSystemOn(args []interface{}) { 76 m := args[0].(*msg.C2S_SetSystemOn) 77 a := args[1].(gate.Agent) 78 79 agentInfo := a.UserData().(*AgentInfo) 80 if agentInfo == nil || agentInfo.user == nil { 81 return 82 } 83 user := agentInfo.user 84 if user.baseData.userData.Role < roleRoot { 85 log.Debug("userID: %v 没有权限", user.baseData.userData.UserID) 86 user.WriteMsg(&msg.S2C_SetSystemOn{Error: msg.S2C_SetSystemOn_PermissionDenied}) 87 return 88 } 89 systemOn = m.On 90 user.WriteMsg(&msg.S2C_SetSystemOn{ 91 Error: msg.S2C_SetSystemOn_OK, 92 On: systemOn, 93 }) 94 if !systemOn { 95 clearToken() // 清除Token 96 } 97 if systemOn { 98 log.Debug("userID: %v 系统开", user.baseData.userData.UserID) 99 } else { 100 log.Debug("userID: %v 系统关", user.baseData.userData.UserID) 101 } 102 } 103 104 func handleHeartbeat(args []interface{}) { 105 a := args[1].(gate.Agent) 106 107 agentInfo := a.UserData().(*AgentInfo) 108 if agentInfo == nil || agentInfo.user == nil { 109 return 110 } 111 agentInfo.user.heartbeatStop = false 112 } 113 114 func handleSetUsernamePassword(args []interface{}) { 115 m := args[0].(*msg.C2S_SetUsernamePassword) 116 a := args[1].(gate.Agent) 117 if a.UserData() == nil { 118 return 119 } 120 user := a.UserData().(*AgentInfo).user 121 if user == nil { 122 return 123 } 124 if strings.TrimSpace(m.Username) == "" || strings.TrimSpace(m.Password) == "" { 125 // 用户名或密码不能为空 126 return 127 } 128 switch user.baseData.userData.Username { 129 case "", m.Username: 130 user.setUsernamePassword(m.Username, m.Password) 131 default: 132 log.Debug("userID: %v 用户名无需更改", user.baseData.userData.UserID) 133 } 134 } 135 136 func handleSetLandlordConfig(args []interface{}) { 137 m := args[0].(*msg.C2S_SetLandlordConfig) 138 a := args[1].(gate.Agent) 139 if a.UserData() == nil { 140 return 141 } 142 user := a.UserData().(*AgentInfo).user 143 if user == nil { 144 return 145 } 146 if user.baseData.userData.Role < roleAdmin { 147 log.Debug("userID: %v 没有权限", user.baseData.userData.UserID) 148 user.WriteMsg(&msg.S2C_SetLandlordConfig{Error: msg.S2C_SetLandlordConfig_PermissionDenied}) 149 return 150 } 151 if m.AndroidVersion > 0 { 152 user.setLandlordAndroidVersion(m.AndroidVersion) 153 } 154 if len(m.AndroidDownloadUrl) > 0 { 155 user.setLandlordAndroidDownloadUrl(m.AndroidDownloadUrl) 156 } 157 if m.IOSVersion > 0 { 158 user.setLandlordIOSVersion(m.IOSVersion) 159 } 160 if len(m.IOSDownloadUrl) > 0 { 161 user.setLandlordIOSDownloadUrl(m.IOSDownloadUrl) 162 } 163 if len(m.Notice) > 0 { 164 user.setLandlordNotice(m.Notice) 165 } 166 if len(m.Radio) > 0 { 167 user.setLandlordRadio(m.Radio) 168 } 169 if len(m.WeChatNumber) > 0 { 170 user.setLandlordWeChatNumber(m.WeChatNumber) 171 } 172 } 173 174 func handleTransferChips(args []interface{}) { 175 m := args[0].(*msg.C2S_TransferChips) 176 a := args[1].(gate.Agent) 177 if a.UserData() == nil { 178 return 179 } 180 user := a.UserData().(*AgentInfo).user 181 if user == nil { 182 return 183 } 184 if !systemOn { 185 user.Close() 186 return 187 } 188 if m.AccountID == 0 { 189 user.WriteMsg(&msg.S2C_TransferChips{Error: msg.S2C_TransferChips_AccountIDInvalid}) 190 return 191 } 192 if user.baseData.userData.AccountID == m.AccountID { 193 user.WriteMsg(&msg.S2C_TransferChips{Error: msg.S2C_TransferChips_NotYourself}) 194 return 195 } 196 if m.Chips < 1 || m.Chips > user.baseData.userData.Chips { 197 user.WriteMsg(&msg.S2C_TransferChips{Error: msg.S2C_TransferChips_ChipsInvalid}) 198 return 199 } 200 if user.baseData.userData.Role < roleAgent { 201 user.WriteMsg(&msg.S2C_TransferChips{Error: msg.S2C_TransferChips_PermissionDenied}) 202 return 203 } 204 user.transferChips(m.AccountID, m.Chips) 205 } 206 207 func handleSetUserRole(args []interface{}) { 208 m := args[0].(*msg.C2S_SetUserRole) 209 a := args[1].(gate.Agent) 210 211 agentInfo := a.UserData().(*AgentInfo) 212 if agentInfo == nil || agentInfo.user == nil { 213 return 214 } 215 agentInfo.user.setRole(m.AccountID, m.Role) 216 } 217 218 func handleCreateLandlordRoom(args []interface{}) { 219 // 收到的 C2S_CreateLandlordRoom 消息 220 m := args[0].(*msg.C2S_CreateLandlordRoom) 221 // 消息的发送者 222 a := args[1].(gate.Agent) 223 if a.UserData() == nil { 224 return 225 } 226 user := a.UserData().(*AgentInfo).user 227 if user == nil { 228 return 229 } 230 if !systemOn { 231 user.Close() 232 return 233 } 234 if _, ok := userIDRooms[user.baseData.userData.UserID]; ok { 235 user.WriteMsg(&msg.S2C_CreateRoom{Error: msg.S2C_CreateRoom_InOtherRoom}) 236 return 237 } 238 switch m.RoomType { 239 //case roomVIPPrivate: 240 // user.createVIPPrivateRoom(m.MaxPlayers) 241 // return 242 //case roomBaseScorePrivate: 243 // user.createBasePrivateRoom(m.BaseScore) 244 // return 245 case roomRedPacketPrivate: 246 user.createRedPacketPrivateRoom(m.RedPacketType) 247 return 248 default: 249 user.WriteMsg(&msg.S2C_CreateRoom{Error: msg.S2C_CreateRoom_RuleError}) 250 } 251 } 252 253 func handleEnterRoom(args []interface{}) { 254 // 收到的 C2S_EnterRoom 消息 255 m := args[0].(*msg.C2S_EnterRoom) 256 // 消息的发送者 257 a := args[1].(gate.Agent) 258 if a.UserData() == nil { 259 return 260 } 261 user := a.UserData().(*AgentInfo).user 262 if user == nil { 263 return 264 } 265 if !systemOn { 266 user.Close() 267 return 268 } 269 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 270 user.enterRoom(r) 271 return 272 } 273 if strings.TrimSpace(m.RoomNumber) == "" { 274 user.WriteMsg(&msg.S2C_EnterRoom{Error: msg.S2C_EnterRoom_Unknown}) 275 return 276 } 277 if r, ok := roomNumberRooms[m.RoomNumber]; ok { 278 user.enterRoom(r) 279 } else { 280 user.WriteMsg(&msg.S2C_EnterRoom{ 281 Error: msg.S2C_EnterRoom_NotCreated, 282 RoomNumber: m.RoomNumber, 283 }) 284 } 285 } 286 287 func handleGetUserChips(args []interface{}) { 288 m := args[0].(*msg.C2S_GetUserChips) 289 _ = m 290 a := args[1].(gate.Agent) 291 if a.UserData() == nil { 292 return 293 } 294 user := a.UserData().(*AgentInfo).user 295 if user == nil { 296 return 297 } 298 user.WriteMsg(&msg.S2C_UpdateUserChips{ 299 Chips: user.baseData.userData.Chips, 300 }) 301 user.sendRedPacketMatchOnlineNumber() 302 user.sendUntakenRedPacketMatchPrizeNumber() 303 } 304 305 func handleGetAllPlayers(args []interface{}) { 306 // 收到的 C2S_GetAllPlayers 消息 307 _ = args[0].(*msg.C2S_GetAllPlayers) 308 // 消息的发送者 309 a := args[1].(gate.Agent) 310 311 agentInfo := a.UserData().(*AgentInfo) 312 if agentInfo == nil || agentInfo.user == nil { 313 return 314 } 315 user := agentInfo.user 316 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 317 user.getAllPlayers(r) 318 } 319 } 320 321 func handleExitRoom(args []interface{}) { 322 // 收到的 C2S_ExitRoom 消息 323 _ = args[0].(*msg.C2S_ExitRoom) 324 // 消息的发送者 325 a := args[1].(gate.Agent) 326 if a.UserData() == nil { 327 return 328 } 329 user := a.UserData().(*AgentInfo).user 330 if user == nil { 331 return 332 } 333 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 334 user.exitRoom(r, true) 335 } else { 336 user.WriteMsg(&msg.S2C_ExitRoom{ 337 Error: msg.S2C_ExitRoom_OK, 338 Position: -1, 339 }) 340 } 341 } 342 343 func handleLandlordPrepare(args []interface{}) { 344 m := args[0].(*msg.C2S_LandlordPrepare) 345 a := args[1].(gate.Agent) 346 347 agentInfo := a.UserData().(*AgentInfo) 348 if agentInfo == nil || agentInfo.user == nil { 349 return 350 } 351 user := agentInfo.user 352 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 353 user.doPrepare(r, m.ShowCards) 354 } 355 } 356 357 func handleSetVIPRoomChips(args []interface{}) { 358 m := args[0].(*msg.C2S_SetVIPRoomChips) 359 // 消息的发送者 360 a := args[1].(gate.Agent) 361 if a.UserData() == nil { 362 return 363 } 364 user := a.UserData().(*AgentInfo).user 365 if user == nil { 366 return 367 } 368 if m.Chips < 10000 || m.Chips%10000 > 0 { 369 user.WriteMsg(&msg.S2C_CreateRoom{Error: msg.S2C_CreateRoom_RuleError}) 370 return 371 } 372 if m.Chips > user.baseData.userData.Chips { 373 user.WriteMsg(&msg.S2C_SetVIPRoomChips{Error: msg.S2C_SetVIPChips_LackOfChips}) 374 return 375 } 376 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 377 user.setVIPRoomChips(r, m.Chips) 378 } 379 } 380 381 func handleLandlordMatching(args []interface{}) { 382 m := args[0].(*msg.C2S_LandlordMatching) 383 // 消息的发送者 384 a := args[1].(gate.Agent) 385 if a.UserData() == nil { 386 return 387 } 388 user := a.UserData().(*AgentInfo).user 389 if user == nil { 390 return 391 } 392 if !systemOn { 393 user.Close() 394 return 395 } 396 if _, ok := userIDRooms[user.baseData.userData.UserID]; ok { 397 //user.enterRoom(r) 398 user.WriteMsg(&msg.S2C_CreateRoom{Error: msg.S2C_CreateRoom_InOtherRoom}) 399 return 400 } 401 switch m.RoomType { 402 case roomPractice: 403 user.createOrEnterPracticeRoom() 404 return 405 case roomBaseScoreMatching: 406 user.createOrEnterBaseScoreMatchingRoom(m.BaseScore) 407 return 408 case roomRedPacketMatching: 409 user.createOrEnterRedPacketMatchingRoom(m.RedPacketType) 410 return 411 default: 412 user.WriteMsg(&msg.S2C_CreateRoom{Error: msg.S2C_CreateRoom_RuleError}) 413 } 414 } 415 416 func handleLandlordBid(args []interface{}) { 417 m := args[0].(*msg.C2S_LandlordBid) 418 a := args[1].(gate.Agent) 419 if a.UserData() == nil { 420 return 421 } 422 user := a.UserData().(*AgentInfo).user 423 if user == nil { 424 return 425 } 426 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 427 user.doBid(r, m.Bid) 428 } 429 } 430 431 func handleLandlordGrab(args []interface{}) { 432 m := args[0].(*msg.C2S_LandlordGrab) 433 a := args[1].(gate.Agent) 434 if a.UserData() == nil { 435 return 436 } 437 user := a.UserData().(*AgentInfo).user 438 if user == nil { 439 return 440 } 441 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 442 user.doGrab(r, m.Grab) 443 } 444 } 445 446 func handleLandlordDouble(args []interface{}) { 447 m := args[0].(*msg.C2S_LandlordDouble) 448 a := args[1].(gate.Agent) 449 if a.UserData() == nil { 450 return 451 } 452 user := a.UserData().(*AgentInfo).user 453 if user == nil { 454 return 455 } 456 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 457 user.doDouble(r, m.Double) 458 } 459 } 460 461 func handleLandlordShowCards(args []interface{}) { 462 m := args[0].(*msg.C2S_LandlordShowCards) 463 a := args[1].(gate.Agent) 464 if a.UserData() == nil { 465 return 466 } 467 user := a.UserData().(*AgentInfo).user 468 if user == nil { 469 return 470 } 471 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 472 user.doShowCards(r, m.ShowCards) 473 } 474 } 475 476 func handleLandlordDiscard(args []interface{}) { 477 m := args[0].(*msg.C2S_LandlordDiscard) 478 a := args[1].(gate.Agent) 479 if a.UserData() == nil { 480 return 481 } 482 user := a.UserData().(*AgentInfo).user 483 if user == nil { 484 return 485 } 486 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 487 user.doDiscard(r, m.Cards) 488 } 489 } 490 491 func handleMonthChipsRank(args []interface{}) { 492 m := args[0].(*msg.C2S_GetMonthChipsRank) 493 a := args[1].(gate.Agent) 494 if a.UserData() == nil { 495 return 496 } 497 user := a.UserData().(*AgentInfo).user 498 if user == nil { 499 return 500 } 501 user.getMonthChipsRank(m.PageNum) 502 } 503 504 func handleMonthChipsRankPos(args []interface{}) { 505 _ = args[0].(*msg.C2S_GetMonthChipsRankPos) 506 a := args[1].(gate.Agent) 507 508 if a.UserData() == nil { 509 return 510 } 511 user := a.UserData().(*AgentInfo).user 512 if user == nil { 513 return 514 } 515 user.getMonthChipsRankPos() 516 } 517 518 func handleMonthWinsRank(args []interface{}) { 519 m := args[0].(*msg.C2S_GetMonthWinsRank) 520 a := args[1].(gate.Agent) 521 if a.UserData() == nil { 522 return 523 } 524 user := a.UserData().(*AgentInfo).user 525 if user == nil { 526 return 527 } 528 user.getMonthWinsRank(m.PageNum) 529 } 530 531 func handleMonthWinsRankPos(args []interface{}) { 532 m := args[0].(*msg.C2S_GetMonthWinsRankPos) 533 _ = m 534 a := args[1].(gate.Agent) 535 if a.UserData() == nil { 536 return 537 } 538 user := a.UserData().(*AgentInfo).user 539 if user == nil { 540 return 541 } 542 user.getMonthWinsRankPos() 543 } 544 545 func handleCleanMonthRanks(args []interface{}) { 546 m := args[0].(*msg.C2S_CleanMonthRanks) 547 _ = m 548 a := args[1].(gate.Agent) 549 if a.UserData() == nil { 550 return 551 } 552 user := a.UserData().(*AgentInfo).user 553 if user == nil { 554 return 555 } 556 if user.baseData.userData.Role < roleRoot { 557 user.Close() 558 return 559 } 560 user.dropMonthRank() 561 } 562 563 func handleSystemHost(args []interface{}) { 564 m := args[0].(*msg.C2S_SystemHost) 565 a := args[1].(gate.Agent) 566 if a.UserData() == nil { 567 return 568 } 569 user := a.UserData().(*AgentInfo).user 570 if user == nil { 571 return 572 } 573 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 574 user.doSystemHost(r, m.Host) 575 } 576 } 577 578 func handleChangeTable(args []interface{}) { 579 a := args[1].(gate.Agent) 580 581 agentInfo := a.UserData().(*AgentInfo) 582 if agentInfo == nil || agentInfo.user == nil { 583 return 584 } 585 user := agentInfo.user 586 if r, ok := userIDRooms[user.baseData.userData.UserID]; ok { 587 user.doChangeTable(r) 588 } 589 } 590 591 func handleGetRedPacketMatchRecord(args []interface{}) { 592 m := args[0].(*msg.C2S_GetRedPacketMatchRecord) 593 a := args[1].(gate.Agent) 594 595 agentInfo := a.UserData().(*AgentInfo) 596 if agentInfo == nil || agentInfo.user == nil { 597 return 598 } 599 if m.PageNumber > 0 && m.PageSize == 10 { 600 agentInfo.user.sendRedPacketMatchRecord(m.PageNumber, m.PageSize) 601 } 602 } 603 604 func handleTakeRedPacketMatchPrize(args []interface{}) { 605 m := args[0].(*msg.C2S_TakeRedPacketMatchPrize) 606 a := args[1].(gate.Agent) 607 if a.UserData() == nil { 608 return 609 } 610 user := a.UserData().(*AgentInfo).user 611 if user == nil { 612 return 613 } 614 user.takeRedPacketMatchPrize(m.ID) 615 } 616 617 func handleDoTask(args []interface{}) { 618 m := args[0].(*msg.C2S_DoTask) 619 a := args[1].(gate.Agent) 620 if a.UserData() == nil { 621 return 622 } 623 user := a.UserData().(*AgentInfo).user 624 if user == nil { 625 return 626 } 627 user.doTask(m.TaskID) 628 } 629 630 func handleChangeTask(args []interface{}) { 631 m := args[0].(*msg.C2S_ChangeTask) 632 a := args[1].(gate.Agent) 633 if a.UserData() == nil { 634 return 635 } 636 user := a.UserData().(*AgentInfo).user 637 if user == nil { 638 return 639 } 640 user.changeRedPacketTask(m) 641 } 642 643 func handleFreeChangeCountDown(args []interface{}) { 644 //m := args[0].(*msg.C2S_FreeChangeCountDown) 645 a := args[1].(gate.Agent) 646 if a.UserData() == nil { 647 return 648 } 649 user := a.UserData().(*AgentInfo).user 650 if user == nil { 651 return 652 } 653 user.freeChangeCountDown() 654 } 655 656 func handleTakeTaskPrize(args []interface{}) { 657 m := args[0].(*msg.C2S_TakeTaskPrize) 658 a := args[1].(gate.Agent) 659 if a.UserData() == nil { 660 return 661 } 662 user := a.UserData().(*AgentInfo).user 663 if user == nil { 664 return 665 } 666 if _, ok := user.baseData.taskIDTaskDatas[m.TaskID]; ok { 667 user.takeTaskPrize(m.TaskID) 668 } else { 669 user.WriteMsg(&msg.S2C_TakeTaskPrize{Error: msg.S2C_TakeTaskPrize_TaskIDInvalid}) 670 } 671 } 672 673 func handleFakeWXPay(args []interface{}) { 674 m := args[0].(*msg.C2S_FakeWXPay) 675 a := args[1].(gate.Agent) 676 677 agentInfo := a.UserData().(*AgentInfo) 678 if agentInfo == nil || agentInfo.user == nil { 679 return 680 } 681 agentInfo.user.FakeWXPay(m.TotalFee) 682 } 683 684 func handleFakeAliPay(args []interface{}) { 685 m := args[0].(*msg.C2S_FakeAliPay) 686 a := args[1].(gate.Agent) 687 688 agentInfo := a.UserData().(*AgentInfo) 689 if agentInfo == nil || agentInfo.user == nil { 690 return 691 } 692 agentInfo.user.FakeAliPay(m.TotalAmount) 693 } 694 695 func handleGetCircleLoginCode(args []interface{}) { 696 m := args[0].(*msg.C2S_GetCircleLoginCode) 697 _ = m 698 a := args[1].(gate.Agent) 699 if a.UserData() == nil { 700 return 701 } 702 user := a.UserData().(*AgentInfo).user 703 if user == nil { 704 return 705 } 706 userID := user.baseData.userData.UserID 707 user.requestCircleLoginCode(func(loginCode string) { 708 if theUser, ok := userIDUsers[userID]; ok { 709 theUser.WriteMsg(&msg.S2C_UpdateCircleLoginCode{ 710 Error: msg.S2C_UpdateCircleLoginCode_OK, 711 LoginCode: loginCode, 712 }) 713 } 714 }, func() { 715 if theUser, ok := userIDUsers[userID]; ok { 716 if theUser == user { 717 theUser.WriteMsg(&msg.S2C_UpdateCircleLoginCode{ 718 Error: msg.S2C_UpdateCircleLoginCode_Error, 719 }) 720 } 721 } 722 }) 723 } 724 725 func handleSetRobotData(args []interface{}) { 726 m := args[0].(*msg.C2S_SetRobotData) 727 a := args[1].(gate.Agent) 728 729 agentInfo := a.UserData().(*AgentInfo) 730 if agentInfo == nil || agentInfo.user == nil { 731 return 732 } 733 user := agentInfo.user 734 if user.isRobot() { 735 if m.Chips > 0 { 736 user.setRobotChips(m.Chips) 737 } 738 } else { 739 user.baseData.userData.Chips = rand.Int63n(14000) + 6000 740 user.baseData.userData.Role = roleRobot 741 user.baseData.userData.LoginIP = m.LoginIP 742 } 743 } 744 func handleGetCardMa(args []interface{}) { 745 _ = args[0].(*msg.C2S_GetCardMa) 746 a := args[1].(gate.Agent) 747 if a.UserData() == nil { 748 a.Close() 749 return 750 } 751 user := a.UserData().(*AgentInfo).user 752 if user == nil { 753 a.Close() 754 return 755 } 756 if user.baseData.userData.PlayTimes >= conf.GetCfgCard().PlayTimes { 757 user.baseData.userData.CardCode = common.GetTodayCode(5) 758 user.baseData.userData.Taken = false 759 updateUserData(user.baseData.userData.UserID, bson.M{"$set": bson.M{ 760 "cardcode": user.baseData.userData.CardCode, 761 "taken": user.baseData.userData.Taken, 762 "playtimes": user.baseData.userData.PlayTimes, 763 }, 764 }) 765 user.WriteMsg(&msg.S2C_CardMa{ 766 Code: user.baseData.userData.CardCode, 767 }) 768 } 769 } 770 func handleTaskState(args []interface{}) { 771 m := args[0].(*msg.C2S_TakeTaskState) 772 a := args[1].(gate.Agent) 773 if a.UserData() == nil { 774 a.Close() 775 return 776 } 777 user := a.UserData().(*AgentInfo).user 778 if user == nil { 779 a.Close() 780 return 781 } 782 resultData := new(RedPacketTaskPrizeData) 783 skeleton.Go(func() { 784 db := mongoDB.Ref() 785 defer mongoDB.UnRef(db) 786 err := db.DB(DB).C("redpackettaskprize").FindId(m.ID).One(&resultData) 787 if err != nil { 788 return 789 } 790 }, func() { 791 if resultData.UserID != user.baseData.userData.UserID || resultData.RedPacket <= 0 { 792 return 793 } 794 if resultData.Taken { 795 return 796 } 797 db := mongoDB.Ref() 798 defer mongoDB.UnRef(db) 799 db.DB(DB).C("redpackettaskprize").UpdateId(m.ID, bson.M{"$set": bson.M{"taken": true}}) 800 user.redpacketTaskRecord() 801 }) 802 } 803 804 func handleShareTasks(args []interface{}) { 805 _ = args[0].(*msg.C2S_GetShareTaskInfo) 806 a := args[1].(gate.Agent) 807 if a.UserData() == nil { 808 a.Close() 809 return 810 } 811 user := a.UserData().(*AgentInfo).user 812 if user == nil { 813 a.Close() 814 return 815 } 816 user.shareTasksInfo() 817 } 818 819 func handleRedpacktTaskCode(args []interface{}) { 820 m := args[0].(*msg.C2S_GetRedpacketTaskCode) 821 a := args[1].(gate.Agent) 822 if a.UserData() == nil { 823 a.Close() 824 return 825 } 826 user := a.UserData().(*AgentInfo).user 827 if user == nil { 828 a.Close() 829 return 830 } 831 task := user.getRedpacketTask(m.TaskId) 832 label := 0 833 skeleton.Go(func() { 834 if task.State == 2 && task.PlayTimes == task.Total { 835 //请求圈圈获取红包码 836 temp := &struct { 837 Code string 838 Data string 839 }{} 840 r := new(circle.RedPacketCodeInfo) 841 r.Sum = task.Fee 842 if !task.Real { 843 switch task.ID / 1000 { 844 case 1: 845 r.Sum = primaryRedpacket[rand.Intn(len(primaryRedpacket))] 846 case 2: 847 r.Sum = middleRedpacket[rand.Intn(len(middleRedpacket))] 848 case 3: 849 r.Sum = highRedpacket[rand.Intn(len(highRedpacket))] 850 } 851 } 852 param, _ := json.Marshal(r) 853 json.Unmarshal(circle.DoRequestRepacketCode(string(param)), temp) 854 if temp.Code != "0" { 855 user.WriteMsg(&msg.S2C_RedpacketTaskCode{ 856 Error: msg.S2C_RedpacketTaskInValid, 857 }) 858 } 859 if temp.Code == "0" { 860 WriteRedPacketGrantRecord(user.baseData.userData, 1, task.Desc, task.Fee) 861 user.WriteMsg(&msg.S2C_RedpacketTaskCode{ 862 Code: temp.Data, 863 Error: 0, 864 Desc: fmt.Sprintf("%.2f元红包", r.Sum), 865 }) 866 //红包任务记录存储 867 record := new(msg.RedpacketTaskRecord) 868 record.Createdat = time.Now().Unix() 869 record.Desc = task.Desc 870 record.Fee = r.Sum 871 record.ID = task.ID 872 record.Real = task.Real 873 record.Type = task.Type 874 record.RedPacketCode = temp.Data 875 user.saveRedPacketTaskRecord(record) 876 //刷新任务列表 877 for key, value := range user.baseData.redPacketTaskList { 878 if value.ID == m.TaskId { 879 label = key 880 break 881 } 882 } 883 user.baseData.redPacketTaskList = append(user.baseData.redPacketTaskList[:label], user.baseData.redPacketTaskList[label+1:]...) 884 user.saveRedPacketTask(user.baseData.redPacketTaskList) 885 user.WriteMsg(&msg.S2C_RedpacketTask{ 886 Tasks: user.baseData.redPacketTaskList, 887 Chips: ChangeChips[user.baseData.userData.Level], 888 FreeChangeTime: user.baseData.userData.FreeChangedAt, 889 }) 890 //刷新红包任务记录 891 user.redpacketTaskRecord() 892 } 893 } 894 }, nil) 895 } 896 897 func handleSubsidyChip(args []interface{}) { 898 m := args[0].(*msg.C2S_SubsidyChip) 899 a := args[1].(gate.Agent) 900 if a.UserData() == nil { 901 a.Close() 902 return 903 } 904 user := a.UserData().(*AgentInfo).user 905 if user == nil { 906 a.Close() 907 return 908 } 909 910 user.TakenSubsidyChip(m.Reply) 911 } 912 913 func handleIsExistSubsidy(args []interface{}) { 914 _ = args[0].(*msg.C2S_IsExistSubsidy) 915 a := args[1].(gate.Agent) 916 if a.UserData() == nil { 917 a.Close() 918 return 919 } 920 user := a.UserData().(*AgentInfo).user 921 if user == nil { 922 a.Close() 923 return 924 } 925 user.AskSubsidyChip() 926 } 927 928 func handleDailySign(args []interface{}) { 929 _ = args[0].(*msg.C2S_DailySign) 930 a := args[1].(gate.Agent) 931 if a.UserData() == nil { 932 a.Close() 933 return 934 } 935 user := a.UserData().(*AgentInfo).user 936 if user == nil { 937 a.Close() 938 return 939 } 940 user.dailySign() 941 } 942 943 func handleShareInfo(args []interface{}) { 944 _ = args[0].(*msg.C2S_ShareInfo) 945 a := args[1].(gate.Agent) 946 if a.UserData() == nil { 947 a.Close() 948 return 949 } 950 user := a.UserData().(*AgentInfo).user 951 if user == nil { 952 a.Close() 953 return 954 } 955 if user.baseData.userData.ParentId == 0 { 956 return 957 } 958 }