Reconnect websockets
This commit is contained in:
parent
6a1d55c968
commit
be695a9881
6 changed files with 103 additions and 26 deletions
|
@ -4,8 +4,6 @@ import (
|
|||
"encoding/json"
|
||||
"sync"
|
||||
|
||||
"github.com/khlieng/name_pending/Godeps/_workspace/src/github.com/gorilla/websocket"
|
||||
|
||||
"github.com/khlieng/name_pending/storage"
|
||||
)
|
||||
|
||||
|
@ -56,18 +54,14 @@ func (s *Session) numIRC() int {
|
|||
return n
|
||||
}
|
||||
|
||||
func (s *Session) setWS(addr string, ws *websocket.Conn) {
|
||||
socket := NewWebSocket(ws)
|
||||
go socket.write()
|
||||
|
||||
func (s *Session) setWS(addr string, w *WebSocket) {
|
||||
s.wsLock.Lock()
|
||||
s.ws[addr] = socket
|
||||
s.ws[addr] = w
|
||||
s.wsLock.Unlock()
|
||||
}
|
||||
|
||||
func (s *Session) deleteWS(addr string) {
|
||||
s.wsLock.Lock()
|
||||
s.ws[addr].close()
|
||||
delete(s.ws, addr)
|
||||
s.wsLock.Unlock()
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package server
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"github.com/khlieng/name_pending/Godeps/_workspace/src/github.com/gorilla/websocket"
|
||||
)
|
||||
|
||||
|
@ -18,8 +20,22 @@ func NewWebSocket(ws *websocket.Conn) *WebSocket {
|
|||
}
|
||||
|
||||
func (w *WebSocket) write() {
|
||||
var err error
|
||||
ping := time.Tick(20 * time.Second)
|
||||
|
||||
for {
|
||||
err := w.conn.WriteMessage(websocket.TextMessage, <-w.Out)
|
||||
select {
|
||||
case msg, ok := <-w.Out:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
err = w.conn.WriteMessage(websocket.TextMessage, msg)
|
||||
|
||||
case <-ping:
|
||||
err = w.conn.WriteJSON(WSResponse{Type: "ping"})
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
|
|
@ -18,6 +18,8 @@ func handleWS(ws *websocket.Conn) {
|
|||
var req WSRequest
|
||||
|
||||
addr := ws.RemoteAddr().String()
|
||||
w := NewWebSocket(ws)
|
||||
go w.write()
|
||||
|
||||
log.Println(addr, "connected")
|
||||
|
||||
|
@ -28,6 +30,8 @@ func handleWS(ws *websocket.Conn) {
|
|||
session.deleteWS(addr)
|
||||
}
|
||||
|
||||
w.close()
|
||||
|
||||
log.Println(addr, "disconnected")
|
||||
return
|
||||
}
|
||||
|
@ -73,7 +77,7 @@ func handleWS(ws *websocket.Conn) {
|
|||
go session.write()
|
||||
}
|
||||
|
||||
session.setWS(addr, ws)
|
||||
session.setWS(addr, w)
|
||||
|
||||
case "connect":
|
||||
var data Connect
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue