github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/game/internal/chanrpc.go (about) 1 package internal 2 3 import ( 4 "conf" 5 "msg" 6 "strings" 7 "time" 8 9 "github.com/name5566/leaf/gate" 10 ) 11 12 type AgentInfo struct { 13 user *User 14 } 15 16 func init() { 17 skeleton.RegisterChanRPC("NewAgent", rpcNewAgent) 18 skeleton.RegisterChanRPC("CloseAgent", rpcCloseAgent) 19 skeleton.RegisterChanRPC("WeChatLogin", rpcWeChatLogin) 20 skeleton.RegisterChanRPC("TokenLogin", rpcTokenLogin) 21 skeleton.RegisterChanRPC("UsernamePasswordLogin", rpcUsernamePasswordLogin) 22 } 23 24 func rpcNewAgent(args []interface{}) { 25 a := args[0].(gate.Agent) 26 27 a.SetUserData(new(AgentInfo)) 28 skeleton.AfterFunc(time.Duration(conf.GetCfgTimeout().ConnectTimeout)*time.Second, func() { 29 if a.UserData() != nil { 30 agentInfo := a.UserData().(*AgentInfo) 31 if agentInfo != nil && agentInfo.user == nil { 32 a.Close() 33 } 34 } 35 }) 36 } 37 38 func rpcWeChatLogin(args []interface{}) { 39 a := args[0].(gate.Agent) 40 m := args[1].(*msg.C2S_WeChatLogin) 41 42 agentInfo := a.UserData().(*AgentInfo) 43 // network closed 44 if agentInfo == nil || agentInfo.user != nil { 45 return 46 } 47 if strings.TrimSpace(m.UnionID) == "" { 48 a.WriteMsg(&msg.S2C_Close{Error: msg.S2C_Close_UnionIDInvalid}) 49 a.Close() 50 return 51 } 52 if !systemOn && m.UnionID != "o8c-nt6tO8aIBNPoxvXOQTVJUxY0" { 53 a.WriteMsg(&msg.S2C_Close{Error: msg.S2C_Close_SystemOff}) 54 a.Close() 55 return 56 } 57 newUser := newUser(a) 58 a.UserData().(*AgentInfo).user = newUser 59 newUser.wechatLogin(m) 60 } 61 62 func rpcTokenLogin(args []interface{}) { 63 a := args[0].(gate.Agent) 64 m := args[1].(*msg.C2S_TokenLogin) 65 66 agentInfo := a.UserData().(*AgentInfo) 67 // network closed 68 if agentInfo == nil || agentInfo.user != nil { 69 return 70 } 71 if strings.TrimSpace(m.Token) == "" { 72 a.WriteMsg(&msg.S2C_Close{Error: msg.S2C_Close_TokenInvalid}) 73 a.Close() 74 return 75 } 76 if !systemOn { 77 a.WriteMsg(&msg.S2C_Close{Error: msg.S2C_Close_SystemOff}) 78 a.Close() 79 return 80 } 81 newUser := newUser(a) 82 a.UserData().(*AgentInfo).user = newUser 83 newUser.tokenLogin(m.Token) 84 } 85 86 func rpcUsernamePasswordLogin(args []interface{}) { 87 a := args[0].(gate.Agent) 88 m := args[1].(*msg.C2S_UsernamePasswordLogin) 89 90 agentInfo := a.UserData().(*AgentInfo) 91 // network closed 92 if agentInfo == nil || agentInfo.user != nil { 93 return 94 } 95 if strings.TrimSpace(m.Username) == "" { 96 a.WriteMsg(&msg.S2C_Close{Error: msg.S2C_Close_UsernameInvalid}) 97 a.Close() 98 return 99 } 100 if !systemOn { 101 a.WriteMsg(&msg.S2C_Close{Error: msg.S2C_Close_SystemOff}) 102 a.Close() 103 return 104 } 105 newUser := newUser(a) 106 a.UserData().(*AgentInfo).user = newUser 107 newUser.usernamePasswordLogin(m.Username, m.Password) 108 } 109 110 func rpcCloseAgent(args []interface{}) { 111 a := args[0].(gate.Agent) 112 113 user := a.UserData().(*AgentInfo).user 114 a.SetUserData(nil) 115 if user == nil { 116 return 117 } 118 if user.state == userLogin { 119 user.state = userLogout 120 user.logout() 121 } 122 }