Retry client connection when websocket is disconnected.

Close websocket server reference when client has disconnected.
This commit is contained in:
Jonathan Leibiusky (@xetorthio)
2017-10-20 15:26:34 +02:00
parent b1406f4ea8
commit fbce7ce63a
3 changed files with 30 additions and 13 deletions

View File

@@ -27,6 +27,7 @@ type socket struct {
listeners map[string][]func(args ...interface{})
r *http.Request
id string
closed bool
}
func newSocket(r *http.Request, c *websocket.Conn) *socket {
@@ -46,8 +47,13 @@ func (s *socket) Request() *http.Request {
return s.r
}
func (s *socket) Close() {
s.closed = true
s.onMessage(message{Name: "close"})
}
func (s *socket) process() {
defer s.onMessage(message{Name: "close"})
defer s.Close()
for {
mt, m, err := s.c.ReadMessage()
if err != nil {
@@ -85,6 +91,11 @@ func (s *socket) onMessage(msg message) {
func (s *socket) Emit(ev string, args ...interface{}) {
s.mx.Lock()
defer s.mx.Unlock()
if s.closed {
return
}
m := message{Name: ev, Args: args}
b, err := json.Marshal(m)
if err != nil {
@@ -93,6 +104,7 @@ func (s *socket) Emit(ev string, args ...interface{}) {
}
if err := s.c.WriteMessage(websocket.TextMessage, b); err != nil {
log.Printf("Cannot write event to websocket connection. Got: %v\n", err)
s.Close()
return
}
}