MCPcopy Create free account
hub / github.com/ebosas/microservices / StartReader

Function StartReader

internal/websocket/read.go:11–41  ·  view source on GitHub ↗

StartReader reads messages from a Websocket connection and passes them to a supplied handler for processing.

(ctx context.Context, done chan<- bool, ws *websocket.Conn, handler func([]byte) error)

Source from the content-addressed store, hash-verified

9// StartReader reads messages from a Websocket connection and passes
10// them to a supplied handler for processing.
11func StartReader(ctx context.Context, done chan<- bool, ws *websocket.Conn, handler func([]byte) error) error {
12 msgs := make(chan []byte)
13 go func() {
14 Reader:
15 for {
16 _, message, err := ws.ReadMessage()
17 if err != nil {
18 // log.Printf("read websocket: %s", err)
19 done <- true
20 break Reader
21 }
22 msgs <- message
23 }
24 }()
25 go func() {
26 Consumer:
27 for {
28 select {
29 case msg := <-msgs:
30 err := handler(msg)
31 if err != nil {
32 done <- true
33 break Consumer
34 }
35 case <-ctx.Done():
36 break Consumer
37 }
38 }
39 }()
40 return nil
41}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected