package socketwrap import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/log" "github.com/gorilla/websocket" ) type Client struct { Manager *ClientsManager Conn *websocket.Conn Send chan *models.Action } func (c *Client) Close() { close(c.Send) c.Conn.Close() } func (c *Client) WritePump() { defer func() { c.Manager.Unregister <- c c.Conn.Close() }() for { select { case message, ok := <-c.Send: if !ok { c.Conn.WriteMessage(websocket.CloseMessage, []byte{}) log.Warn("send socket is closed") return } log.Warn("socket:", message) err := c.Conn.WriteJSON(message) if err != nil { log.Warn("can not send message", err) return } n := len(c.Send) for i := 0; i < n; i++ { err = c.Conn.WriteJSON(<-c.Send) if err != nil { log.Warn("can not send message", err) return } } } } }