main.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "fmt"
  6. "github.com/gorilla/websocket"
  7. "github.com/sirupsen/logrus"
  8. "time"
  9. )
  10. var token = flag.String("token", "", "user token")
  11. func main() {
  12. flag.Parse()
  13. fmt.Println(token)
  14. if *token == "" {
  15. fmt.Println("请输入token")
  16. return
  17. }
  18. wsURL := "ws://10.0.0.230:12090/bus/v1/homePage"
  19. d := websocket.Dialer{}
  20. conn, _, err := d.Dial(wsURL, nil)
  21. if err != nil {
  22. panic(err.Error())
  23. }
  24. go clientReadMessage(conn)
  25. writeToken(conn, *token)
  26. go clientWriteMessage(conn)
  27. select {}
  28. }
  29. func writeToken(conn *websocket.Conn, token string) {
  30. homeMsg := HomeMsg{
  31. MsgType: 11,
  32. Data: token,
  33. }
  34. homeBytes, err := json.Marshal(homeMsg)
  35. if err != nil {
  36. fmt.Println("marshal err")
  37. return
  38. }
  39. err = conn.WriteMessage(websocket.TextMessage, homeBytes)
  40. if err != nil {
  41. fmt.Printf("Write Message error:%s\n", err)
  42. return
  43. }
  44. fmt.Println("Write token success")
  45. }
  46. func clientReadMessage(conn *websocket.Conn) {
  47. for {
  48. msgType, msg, err := conn.ReadMessage()
  49. if err != nil {
  50. if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
  51. logrus.Warnf("readMessage err:%s", err)
  52. } else {
  53. logrus.Info("readMessage conn closed")
  54. }
  55. break
  56. }
  57. logrus.WithFields(logrus.Fields{"msgType": msgType, "data": string(msg), "err": err}).Info("read success")
  58. }
  59. }
  60. type HomeMsg struct {
  61. DeptID int `json:"deptId"`
  62. MsgType uint8 `json:"msgType"`
  63. Data string `json:"data"`
  64. }
  65. func clientWriteMessage(conn *websocket.Conn) {
  66. ticker := time.NewTicker(5 * time.Second)
  67. for {
  68. select {
  69. case <-ticker.C:
  70. homeMsg := HomeMsg{
  71. MsgType: 1,
  72. Data: "",
  73. }
  74. homeBytes, err := json.Marshal(homeMsg)
  75. if err != nil {
  76. fmt.Println("marshal err")
  77. return
  78. }
  79. err = conn.WriteMessage(websocket.TextMessage, homeBytes)
  80. if err != nil {
  81. fmt.Printf("Write Message error:%s\n", err)
  82. return
  83. }
  84. fmt.Println("Write Message success")
  85. }
  86. }
  87. }