main.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "flag"
  4. "github.com/gorilla/websocket"
  5. "log"
  6. "net/url"
  7. "os"
  8. )
  9. var (
  10. conn = flag.String("url", "", "connection url")
  11. token = flag.String("token", "", "the access token")
  12. )
  13. type Verification struct {
  14. Prefix string `json:"prefix"`
  15. Token string `json:"token"`
  16. }
  17. func main() {
  18. flag.Parse()
  19. connString := *conn
  20. if connString == "" {
  21. connString = os.Getenv("MESSAGE_PUSHER_URL")
  22. }
  23. if *token == "" {
  24. *token = os.Getenv("MESSAGE_PUSHER_TOKEN")
  25. }
  26. connUrl, err := url.Parse(connString)
  27. if err != nil {
  28. log.Fatal("Failed to parse connection url", err)
  29. return
  30. }
  31. scheme := "ws"
  32. if connUrl.Scheme == "https" {
  33. scheme = "wss"
  34. }
  35. u := url.URL{Scheme: scheme, Host: connUrl.Host, Path: "/"}
  36. for {
  37. log.Printf("Connecting to %s...\n", u.String())
  38. c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
  39. if err != nil {
  40. log.Fatal("Failed to connect to server:", err)
  41. return
  42. }
  43. log.Printf("Server connected.\n")
  44. verification := &Verification{
  45. Prefix: connUrl.Path[1:],
  46. Token: *token,
  47. }
  48. err = c.WriteJSON(verification)
  49. if err != nil {
  50. log.Fatal(err.Error())
  51. }
  52. for {
  53. var message = new(Message)
  54. err = c.ReadJSON(message)
  55. if err != nil {
  56. log.Println("Error occurred when read message:", err)
  57. log.Println("Connection lost, retrying...")
  58. break
  59. } else {
  60. log.Println("New message arrived.")
  61. Notify(message)
  62. }
  63. }
  64. }
  65. }