modulepackage
0.0.0-20200402012006-8f548a670af9
Repository: https://github.com/201richk/ws.git
Documentation: pkg.go.dev
# README
ws
//ReadLoop Read meessage and pumps it to send channel
func (c *Client) ReadLoop() {
defer func() {
c.conn.Close()
}()
c.conn.SetReadLimit(maxMessageSize)
c.conn.SetReadDeadline(time.Now().Add(pongWait))
c.conn.SetPongHandler(func(string) error { c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })
for {
_, p, err := c.conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
log.Printf("error: %v", err)
}
break
}
p = bytes.TrimSpace(bytes.Replace(p, []byte{'\n'}, []byte{' '}, -1))
msg := message{" ", p}
c.send <- &msg
}
}
//WriteMessage write a message to the client
func (c *Client) WriteMessage(msg []byte) {
ticker := time.NewTicker(pingPeriod)
defer func() {
ticker.Stop()
c.conn.Close()
}()
for {
select {
case message, ok := <-c.send:
c.conn.SetWriteDeadline(time.Now().Add(writeWait))
if !ok {
// The hub closed the channel.
c.conn.WriteMessage(websocket.CloseMessage, []byte{})
return
}
w, err := c.conn.NextWriter(websocket.TextMessage)
if err != nil {
return
}
w.Write(message.msg)
// // Add queued chat messages to the current websocket message.
// n := len(c.send)
// for i := 0; i < n; i++ {
// w.Write(<-c.send)
// }
if err := w.Close(); err != nil {
return
}
case <-ticker.C:
c.conn.SetWriteDeadline(time.Now().Add(writeWait))
if err := c.conn.WriteMessage(websocket.PingMessage, nil); err != nil {
return
}
}
}
}