diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-04-01 11:39:13 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-01 11:39:13 -0400 |
commit | 95da05a8c97332d8eff90c7587ed17a41966c5f0 (patch) | |
tree | d50084481487988ad83deb5ab6af2be7d2a9f110 /app/web_conn.go | |
parent | d39947f53933ee4beb4ed8ab614324edc36fba2d (diff) | |
download | chat-95da05a8c97332d8eff90c7587ed17a41966c5f0.tar.gz chat-95da05a8c97332d8eff90c7587ed17a41966c5f0.tar.bz2 chat-95da05a8c97332d8eff90c7587ed17a41966c5f0.zip |
PLT-5750 Add sequence number to websocket connections and events (#5907)
* Add sequence number to websocket connections and events
* Copy pointer instead of pass by value and use int64 over uint64
* Add more logging to missed events
Diffstat (limited to 'app/web_conn.go')
-rw-r--r-- | app/web_conn.go | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/app/web_conn.go b/app/web_conn.go index da6330f5c..11290b67d 100644 --- a/app/web_conn.go +++ b/app/web_conn.go @@ -35,6 +35,7 @@ type WebConn struct { Locale string AllChannelMembers map[string]string LastAllChannelMembersTime int64 + Sequence int64 } func NewWebConn(ws *websocket.Conn, session model.Session, t goi18n.TranslateFunc, locale string) *WebConn { @@ -104,8 +105,19 @@ func (c *WebConn) WritePump() { return } + var msgBytes []byte + if evt, ok := msg.(*model.WebSocketEvent); ok { + cpyEvt := &model.WebSocketEvent{} + *cpyEvt = *evt + cpyEvt.Sequence = c.Sequence + msgBytes = []byte(cpyEvt.ToJson()) + c.Sequence++ + } else { + msgBytes = []byte(msg.ToJson()) + } + c.WebSocket.SetWriteDeadline(time.Now().Add(WRITE_WAIT)) - if err := c.WebSocket.WriteMessage(websocket.TextMessage, msg.GetPreComputeJson()); err != nil { + if err := c.WebSocket.WriteMessage(websocket.TextMessage, msgBytes); err != nil { // browsers will appear as CloseNoStatusReceived if websocket.IsCloseError(err, websocket.CloseNormalClosure, websocket.CloseNoStatusReceived) { l4g.Debug(fmt.Sprintf("websocket.send: client side closed socket userId=%v", c.UserId)) @@ -179,7 +191,6 @@ func (webCon *WebConn) IsAuthenticated() bool { func (webCon *WebConn) SendHello() { msg := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_HELLO, "", "", webCon.UserId, nil) msg.Add("server_version", fmt.Sprintf("%v.%v.%v.%v", model.CurrentVersion, model.BuildNumber, utils.CfgHash, utils.IsLicensed)) - msg.DoPreComputeJson() webCon.Send <- msg } |