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  }