package internal import ( "app/internal/iniconfig" "app/internal/msg_util" "app/servers/internal/app_tools" "core/log" "core/network" "google.golang.org/protobuf/proto" ) func NewClient(conf *iniconfig.Config, account string, parser *msg_util.ProtoParser, initState IState, isCycle bool) *Client { c := &Client{ conf: conf, paymentAddr: conf.String("payment"), loginAddr: conf.String("login"), goatLoginKey: conf.String("goat_key"), account: account, passport_type: conf.MustString("passport_type", app_tools.PassportTypeUUID), msgCh: make(chan proto.Message, 64), parser: parser, isCycle: isCycle, } c.fsm = NewFsm(c, initState) log.KV("account", account).Info("robot start") return c } type Client struct { conf *iniconfig.Config fsm *Fsm parser *msg_util.ProtoParser msgCh chan proto.Message gameConn network.INetClient chatConn network.INetClient paymentAddr string loginAddr string gameAddr string goatLoginKey string account string passport_type string sid int32 uid int64 rid int64 isCycle bool } func (this *Client) Config() *iniconfig.Config { return this.conf } func (this *Client) GoatKey() string { return this.goatLoginKey } func (this *Client) FixState() string { return this.conf.MustString("state_mode", "") } func (this *Client) Parser() *msg_util.ProtoParser { return this.parser } func (this *Client) PaymentAddr() string { return this.paymentAddr } func (this *Client) LoginAddr() string { return this.loginAddr } func (this *Client) GameAddr() string { return this.gameAddr } func (this *Client) Account() string { return this.account } func (this *Client) PassportType() string { return this.passport_type } func (this *Client) SID() int32 { return this.sid } func (this *Client) UpdateLoginInfo(gameAddr string, gameConn network.INetClient, sid int32, uid int64, rid int64) { this.gameAddr = gameAddr this.rid = rid this.uid = uid this.sid = sid this.gameConn = gameConn } func (this *Client) recvMsg(pbmsg proto.Message) { this.msgCh <- pbmsg } func (this *Client) Send2Game(msg proto.Message) { if conn := this.gameConn; conn != nil { conn.SendMsg(msg) } } func (this *Client) Send2Chat(msg proto.Message) { if conn := this.chatConn; conn != nil { conn.SendMsg(msg) } } func (this *Client) Stop() { if conn := this.gameConn; conn != nil { this.gameConn = nil conn.Stop() } if conn := this.chatConn; conn != nil { this.chatConn = nil conn.Stop() } this.fsm.Stop() }