Skip to content

Instantly share code, notes, and snippets.

@khawerrind
Created June 15, 2018 02:59
Show Gist options
  • Save khawerrind/5256abd84ce8526d68918f841834f545 to your computer and use it in GitHub Desktop.
Save khawerrind/5256abd84ce8526d68918f841834f545 to your computer and use it in GitHub Desktop.
func (w *wsHandler) read() {
_, n, err := w.conn.ReadMessage()
if err != nil {
w.closed = true
event := conversation.CloseEvent{
ConnectionID: w.statusManager.ConnectionID,
}
event.Name = eventNameClose
w.rc.Publish(w.profile.ID+":"+w.statusManager.ConnectionID, event, false)
return
}
request := action{}
err = json.Unmarshal(n, &request)
if err != nil {
return
}
w.HandleIncome(request)
return
}
func (w *wsHandler) readPump(conn *websocket.Conn) {
defer func() {
w.Close()
}()
w.conn.SetReadLimit(maxMessageSize)
w.conn.SetReadDeadline(time.Now().Add(pongWait))
w.conn.SetPongHandler(func(string) error { w.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })
for {
_, message, err := w.conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
fmt.Printf("error: %v", err)
}
break
}
w.Write(message)
}
}
func (w *wsHandler) writePump(conn *websocket.Conn) {
ticker := time.NewTicker(pingPeriod)
defer func() {
ticker.Stop()
w.Close()
}()
for {
select {
case <-ticker.C:
if w.closed {
break
}
w.conn.SetWriteDeadline(time.Now().Add(writeWait))
w.Write(websocket.PingMessage)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment