main.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "net"
  7. "time"
  8. "go-common/app/service/main/broadcast/libs/bufio"
  9. "go-common/app/service/main/broadcast/model"
  10. "go-common/library/xstr"
  11. )
  12. var (
  13. op string
  14. key string
  15. room string
  16. accessKey string
  17. platform string
  18. mobiApp string
  19. addr string
  20. build int
  21. )
  22. const (
  23. _heartTime = 30 * time.Second
  24. )
  25. func init() {
  26. flag.StringVar(&addr, "addr", "172.22.33.126:7821", "server ip:port")
  27. flag.StringVar(&key, "device_id", "test_"+fmt.Sprint(time.Now().Unix()), "client key")
  28. flag.StringVar(&room, "room_id", "", "client room")
  29. flag.StringVar(&accessKey, "access_key", "", "client access_key")
  30. flag.StringVar(&platform, "platform", "", "client platform")
  31. flag.StringVar(&mobiApp, "mobi_app", "", "client moni_app")
  32. flag.StringVar(&op, "op", "", "op=1000,1002,1003")
  33. flag.IntVar(&build, "build", 0, "client build")
  34. }
  35. func main() {
  36. flag.Parse()
  37. if op == "" {
  38. panic("please input the op=1000/1002/1003")
  39. }
  40. if platform == "" {
  41. panic("please input the platform=android/ios/web")
  42. }
  43. log.Printf("addr=%s op=%s key=%s\n", addr, op, key)
  44. _, err := xstr.SplitInts(op)
  45. if err != nil {
  46. panic(err)
  47. }
  48. client()
  49. }
  50. func client() {
  51. conn, err := net.DialTimeout("tcp", addr, time.Second)
  52. if err != nil {
  53. log.Printf("err.net.Dial(%s) error(%v)\n", addr, err)
  54. return
  55. }
  56. defer func() {
  57. conn.Close()
  58. log.Printf("err.conn.Close() key:%s\n", key)
  59. }()
  60. wr := bufio.NewWriter(conn)
  61. rd := bufio.NewReader(conn)
  62. // timeout
  63. if err = conn.SetDeadline(time.Now().Add(time.Second * 5)); err != nil {
  64. log.Printf("err.conn.SetDeadline() error(%v)\n", err)
  65. return
  66. }
  67. body := fmt.Sprintf(`{"device_id":"%s","access_key":"%s","platform":"%s","mobi_app":"%s","build":%d,"accepts":[%s],"room_id":"%s"}`, key, accessKey, platform, mobiApp, build, op, room)
  68. log.Printf("auth:%s\n", body)
  69. // auth first
  70. proto := &model.Proto{
  71. Operation: model.OpAuth,
  72. Body: []byte(body),
  73. }
  74. if err = proto.WriteTCP(wr); err != nil {
  75. log.Printf("err.auth write error(%v)\n", err)
  76. return
  77. }
  78. if err = wr.Flush(); err != nil {
  79. log.Printf("err.auth flush error(%v)\n", err)
  80. return
  81. }
  82. go heartbeat(conn, wr, key)
  83. for {
  84. if err = proto.ReadTCP(rd); err != nil {
  85. log.Printf("err.read a proto key:%v error(%v)\n", key, err)
  86. return
  87. }
  88. switch proto.Operation {
  89. case model.OpHeartbeatReply:
  90. if err = conn.SetDeadline(time.Now().Add(_heartTime * 5)); err != nil {
  91. log.Printf("err.conn.SetDeadline() key:%v error(%v)\n", key, err)
  92. return
  93. }
  94. log.Printf("info.read key:%v heartbeat proto.body(%s) seq: %d\n", key, string(proto.Body), proto.SeqId)
  95. default:
  96. log.Printf("info.read a key:%v proto(%+v) op:%d\n", key, proto, proto.Operation)
  97. }
  98. }
  99. }
  100. func heartbeat(conn net.Conn, wr *bufio.Writer, key string) {
  101. var (
  102. seq int32
  103. err error
  104. )
  105. defer conn.Close()
  106. for {
  107. seq++
  108. proto := &model.Proto{
  109. Operation: model.OpHeartbeat,
  110. SeqId: seq,
  111. }
  112. if err = proto.WriteTCP(wr); err != nil {
  113. log.Printf("err.heartbeat write error(%v)\n", err)
  114. return
  115. }
  116. if err = wr.Flush(); err != nil {
  117. log.Printf("err.heartbeat key:%s flush error(%v)\n", key, err)
  118. return
  119. }
  120. log.Printf("info.write key:%s heartbeat proto(%+v)\n", key, proto)
  121. time.Sleep(_heartTime)
  122. }
  123. }