diff --git a/README.md b/README.md index 387f574..3193d80 100644 --- a/README.md +++ b/README.md @@ -24,5 +24,30 @@ brew install telsocket ```bash telsocket -url ``` +Send custom headers + +```bash +telsocket -url -headers name1=value1,name2=value2 +``` + +Enable `ping` and/or `close` messages + +```bash +telsocket -url -ping +``` +```bash +telsocket -url -close +``` + +```bash +telsocket -url -close -ping +``` + +After the connection is established write _ping_ or _close_ and hit enter. + +Set the maximal payload size per frame (usefull to debug multi-frame messages). Replace _XXX_ with the new maximal payload size. +```bash +telsocket -url -maxframesize=XXX +``` ![](http://telsocket.org/images/sample.png) diff --git a/main.go b/main.go index b945bb0..447d2f3 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,9 @@ import ( var url = flag.String("url", "", "-url ws://127.0.0.1") var headers = flag.String("headers", "", "-headers name1=value1,name2=value2") +var withPing = flag.Bool("ping", false, "-ping") +var withClose = flag.Bool("close", false, "-close") +var maxFrameSize = flag.Int("maxframesize", 0, "-maxframesize") func main() { flag.Parse() @@ -30,7 +33,21 @@ func main() { } done := make(chan bool) c := NewClient(*url, headersMap) - + if *withPing { + c.SetPongHandler(func(s string) error { + fmt.Println("\n", colorRed("PONG rceived:"), colorRed(s)) + return nil + }) + var defaultPingHandler = c.PingHandler() + c.SetPingHandler(func(s string) error { + fmt.Println("\n", colorRed("PING rceived:"), colorRed(s)) + if err := defaultPingHandler(string(s)); err != nil { + return err + } + fmt.Println(colorRed(" PONG sent")) + return nil + }) + } go func() { for { _, r, err := c.ReadMessage() @@ -51,6 +68,15 @@ func main() { return } line = strings.TrimSpace(line) + if *withClose && line == "close" { + c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, "")) + return + } + if *withPing && line == "ping" { + c.WriteMessage(websocket.PingMessage, []byte{}) + fmt.Print("\n", colorRed(" PING sent")) + continue + } if err = c.WriteMessage(1, []byte(line)); err != nil { fmt.Println(err.Error()) } @@ -67,7 +93,20 @@ func NewClient(url string, headers map[string]string) *websocket.Conn { for key, value := range headers { r.Header.Add(key, value) } - c, _, err := websocket.DefaultDialer.Dial(url, r.Header) + + var d websocket.Dialer + + d = *websocket.DefaultDialer + + if *maxFrameSize > 0 { + d = websocket.Dialer{ + WriteBufferSize : *maxFrameSize, + } + } + + c, _, err := d.Dial(url, r.Header) + + if err != nil { log.Fatal("errrr ", err) } else { @@ -80,3 +119,6 @@ func NewClient(url string, headers map[string]string) *websocket.Conn { func color(msg string) string { return ("\033[36m" + msg + "\033[0m") } +func colorRed(msg string) string{ + return ("\033[31m" + msg + "\033[0m") +}