player.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //@Author : KaiShin
  2. //@Time : 2022/3/16
  3. package main
  4. import (
  5. "bufio"
  6. "call_center/call/rpc/call"
  7. "call_center/call/rpc/pb"
  8. "call_center/demo/data"
  9. "context"
  10. "github.com/tal-tech/go-zero/core/logx"
  11. "github.com/tal-tech/go-zero/zrpc"
  12. "io"
  13. "os"
  14. )
  15. func playerLogin() {
  16. conf := new(zrpc.RpcClientConf)
  17. conf.Target = data.Addr
  18. data.Client = call.NewCall(zrpc.MustNewClient(*conf))
  19. req := new(call.ClientMsgReq)
  20. cmd := pb.CommandMsg{}
  21. idInfo := pb.IdInfo{GameId: data.GameId} // 游客登录不需要id
  22. req.Cmd = append(req.Cmd, &cmd)
  23. req.IdInfo = &idInfo
  24. stream, err := data.Client.ClientLogin(context.Background(), req)
  25. if err != nil {
  26. logx.Errorf("playerLogin failed, playerId:%s, err:%s", err)
  27. return
  28. }
  29. for {
  30. res, err := stream.Recv()
  31. if err == io.EOF {
  32. logx.Info("收到服务端的结束信号")
  33. break
  34. }
  35. if err != nil {
  36. logx.Info("接收数据错误:", err)
  37. }
  38. if res == nil {
  39. break
  40. }
  41. for _, cmd := range res.Cmd {
  42. if cmd.CmdType != pb.ECommand_MSG_HEART_BEAT {
  43. logx.Infof("[DEBUG] 收到cmd:%v, val:%v, str:%v, buff:%s", cmd.CmdType, cmd.CmdVal, cmd.CmdStr, cmd.GetBuff())
  44. }
  45. switch cmd.CmdType {
  46. case pb.ECommand_SEND_MSG:
  47. msg := cmd.GetChatMsg()
  48. logx.Infof("[客户端收到]:%s", msg.Input)
  49. case pb.ECommand_ON_PLAYER_CONNECT:
  50. data.PlayerId = cmd.CmdStr
  51. logx.Info("player conn, id: ", data.PlayerId)
  52. break
  53. case pb.ECommand_ON_SERVICE_DISCONNECT:
  54. logx.Infof("服务客服{%v}已断开", cmd.CmdStr)
  55. break
  56. case pb.ECommand_ON_PLAYER_RECEIVE_REPLY:
  57. data.ServiceId = cmd.CmdStr
  58. logx.Info("分配到客服:", data.ServiceId)
  59. default:
  60. break
  61. }
  62. }
  63. }
  64. }
  65. func playerOnCall() {
  66. input := bufio.NewReader(os.Stdin)
  67. for {
  68. logx.Info("请输入信息:")
  69. cmdStr, _ := input.ReadString('\n')
  70. var proto = new(pb.ClientMsgReq)
  71. var cmd = new(pb.CommandMsg)
  72. cmd.CmdType = pb.ECommand_CALL_PLAYER_MSG
  73. var chatMsg = new(pb.CommandMsg_ChatMsg)
  74. chatMsg.ChatMsg = &pb.ChatMsg{Input: cmdStr}
  75. cmd.Buff = chatMsg
  76. proto.Cmd = append(proto.Cmd, cmd)
  77. var idInfo = new(pb.IdInfo)
  78. idInfo.Id = data.PlayerId
  79. proto.IdInfo = idInfo
  80. if data.Client == nil {
  81. logx.Error("player not playerLogin, client is null")
  82. continue
  83. }
  84. if _, err := data.Client.ClientCall(context.Background(), proto); err != nil {
  85. logx.Error("call error:", err)
  86. continue
  87. }
  88. }
  89. }
  90. func main() {
  91. go playerOnCall()
  92. playerLogin()
  93. }