MCPcopy Index your code
hub / github.com/yusing/godoxy / execWebsocket

Function execWebsocket

cmd/cli/cli.go:369–412  ·  view source on GitHub ↗
(ep Endpoint, reqURL string)

Source from the content-addressed store, hash-verified

367}
368
369func execWebsocket(ep Endpoint, reqURL string) error {
370 wsURL := strings.Replace(reqURL, "http://", "ws://", 1)
371 wsURL = strings.Replace(wsURL, "https://", "wss://", 1)
372 if strings.ToUpper(ep.Method) != http.MethodGet {
373 return fmt.Errorf("--ws requires GET endpoint, got %s", ep.Method)
374 }
375 c, _, err := websocket.DefaultDialer.Dial(wsURL, nil)
376 if err != nil {
377 return err
378 }
379 defer c.Close()
380
381 stopPing := make(chan struct{})
382 defer close(stopPing)
383 go func() {
384 ticker := time.NewTicker(3 * time.Second)
385 defer ticker.Stop()
386 for {
387 select {
388 case <-stopPing:
389 return
390 case <-ticker.C:
391 _ = c.SetWriteDeadline(time.Now().Add(2 * time.Second))
392 if err := c.WriteMessage(websocket.TextMessage, []byte("ping")); err != nil {
393 return
394 }
395 }
396 }
397 }()
398
399 for {
400 _, msg, err := c.ReadMessage()
401 if err != nil {
402 if websocket.IsCloseError(err, websocket.CloseNormalClosure, websocket.CloseGoingAway) || strings.Contains(err.Error(), "close") {
403 return nil
404 }
405 return err
406 }
407 if string(msg) == "pong" {
408 continue
409 }
410 fmt.Println(string(msg))
411 }
412}
413
414func printJSON(payload []byte) {
415 if len(payload) == 0 {

Callers 1

executeEndpointFunction · 0.85

Calls 5

CloseMethod · 0.65
AddMethod · 0.65
SetWriteDeadlineMethod · 0.45
ContainsMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected