package websocket import ( "encoding/json" "github.com/charmbracelet/log" "github.com/gorilla/websocket" GoTomato "git.smsvc.net/pomodoro/GoTomato/pkg/models" ) var Done = make(chan struct{}) // Receives websocket messages and writes them to a channel. // Closes the channel if websocket closes. func (c Client) ProcessServerMessages(channel chan<- GoTomato.ServerMessage) { var serverMessage GoTomato.ServerMessage defer close(Done) for { _, message, err := c.Conn.ReadMessage() if err != nil { if websocket.IsCloseError(err, websocket.CloseNormalClosure) { // Ignore normal closure and exit gracefully return } // Log any other errors log.Error("Read error!", "reason", err) close(channel) return } err = json.Unmarshal(message, &serverMessage) if err != nil { log.Error("Error unmarshalling!", "reason", err) continue } channel <- serverMessage } }