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  }