This commit is contained in:
crusader 2017-07-12 21:57:03 +09:00
parent 6e4ca0dd5c
commit 1d480c52cd

View File

@ -3,7 +3,6 @@ package websocket
import (
"fmt"
"log"
"net"
"net/http"
"sync"
"time"
@ -118,11 +117,10 @@ func (c *client) On(event string, cb OnFunc) {
}
func (c *client) initialize() error {
c.startPingPong()
c.startPing()
}
func (c *client) destroy() error {
c.stopPingPong()
c.status = DISCONNECTED
for i := range c.onDisconnectListeners {
@ -132,39 +130,25 @@ func (c *client) destroy() error {
return c.conn.Close()
}
func (c *client) startPingPong() {
c.conn.SetPingHandler(func(message string) error {
err := c.conn.WriteControl(gWebsocket.PongMessage, []byte("pong"), time.Now().Add(c.server.options.PongTimeout))
if err == gWebsocket.ErrCloseSent {
return nil
} else if e, ok := err.(net.Error); ok && e.Temporary() {
return nil
}
return err
})
func (c *client) startPing() {
c.pingTicker = time.NewTicker(c.server.options.PingPeriod)
go func() {
defer c.pingTicker.Stop()
for {
<-c.pingTicker.C
err := c.conn.WriteControl(gWebsocket.PingMessage, []byte("ping"), time.Now().Add(c.server.options.PingTimeout))
if err == gWebsocket.ErrCloseSent {
} else if e, ok := err.(net.Error); ok && e.Temporary() {
if err := c.conn.WriteControl(gWebsocket.PingMessage, []byte{}, time.Now().Add(c.server.options.PingTimeout)); err != nil {
log.Println("ping:", err)
}
}
}()
}
func (c *client) stopPingPong() {
c.pingTicker.Stop()
}
func (c *client) startReading() {
hasReadTimeout := c.server.options.ReadTimeout > 0
c.conn.SetReadLimit(c.server.options.MaxMessageSize)
c.conn.SetPongHandler(func(message string) error {
if hasReadTimeout {
c.conn.SetReadDeadline(time.Now().Add(c.server.options.ReadTimeout))
c.conn.SetReadDeadline(time.Now().Add(c.server.options.PongTimeout))
}
return nil