Files
message-pusher/client/main.go
T

70 lines
1.4 KiB
Go
Raw Normal View History

2021-06-13 17:52:41 +08:00
package main
import (
"flag"
"github.com/gorilla/websocket"
"log"
"net/url"
2022-07-28 23:08:15 +08:00
"os"
2021-06-13 17:52:41 +08:00
)
var (
2022-07-28 23:08:15 +08:00
conn = flag.String("url", "", "connection url")
token = flag.String("token", "", "the access token")
2021-06-13 17:52:41 +08:00
)
type Verification struct {
Prefix string `json:"prefix"`
Token string `json:"token"`
}
func main() {
flag.Parse()
2022-07-28 23:08:15 +08:00
connString := *conn
if connString == "" {
connString = os.Getenv("MESSAGE_PUSHER_URL")
}
if *token == "" {
*token = os.Getenv("MESSAGE_PUSHER_TOKEN")
}
connUrl, err := url.Parse(connString)
2021-06-13 17:52:41 +08:00
if err != nil {
2022-07-28 23:08:15 +08:00
log.Fatal("Failed to parse connection url", err)
2021-06-13 17:52:41 +08:00
return
}
2022-07-28 23:08:15 +08:00
scheme := "ws"
if connUrl.Scheme == "https" {
scheme = "wss"
2021-06-13 17:52:41 +08:00
}
2022-07-28 23:08:15 +08:00
u := url.URL{Scheme: scheme, Host: connUrl.Host, Path: "/"}
2021-06-13 17:52:41 +08:00
for {
2022-07-28 23:08:15 +08:00
log.Printf("Connecting to %s...\n", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
2021-06-13 17:52:41 +08:00
if err != nil {
2022-07-28 23:08:15 +08:00
log.Fatal("Failed to connect to server:", err)
return
}
log.Printf("Server connected.\n")
verification := &Verification{
Prefix: connUrl.Path[1:],
Token: *token,
}
err = c.WriteJSON(verification)
if err != nil {
log.Fatal(err.Error())
}
for {
var message = new(Message)
err = c.ReadJSON(message)
if err != nil {
log.Println("Error occurred when read message:", err)
log.Println("Connection lost, retrying...")
break
} else {
log.Println("New message arrived.")
Notify(message)
}
2021-06-13 17:52:41 +08:00
}
}
}