mirror of
https://github.com/mattermost/mattermost.git
synced 2025-02-25 18:55:24 -06:00
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
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -94,7 +94,6 @@ func Publish(message *model.WebSocketEvent) {
|
||||
metrics.IncrementWebsocketEvent(message.Event)
|
||||
}
|
||||
|
||||
message.DoPreComputeJson()
|
||||
for _, hub := range hubs {
|
||||
hub.Broadcast(message)
|
||||
}
|
||||
@@ -105,7 +104,6 @@ func Publish(message *model.WebSocketEvent) {
|
||||
}
|
||||
|
||||
func PublishSkipClusterSend(message *model.WebSocketEvent) {
|
||||
message.DoPreComputeJson()
|
||||
for _, hub := range hubs {
|
||||
hub.Broadcast(message)
|
||||
}
|
||||
|
||||
@@ -61,7 +61,6 @@ func (wr *WebSocketRouter) ServeWebSocket(conn *WebConn, r *model.WebSocketReque
|
||||
HubRegister(conn)
|
||||
|
||||
resp := model.NewWebSocketResponse(model.STATUS_OK, r.Seq, nil)
|
||||
resp.DoPreComputeJson()
|
||||
conn.Send <- resp
|
||||
}
|
||||
|
||||
@@ -91,7 +90,6 @@ func ReturnWebSocketError(conn *WebConn, r *model.WebSocketRequest, err *model.A
|
||||
|
||||
err.DetailedError = ""
|
||||
errorResp := model.NewWebSocketError(r.Seq, err)
|
||||
errorResp.DoPreComputeJson()
|
||||
|
||||
conn.Send <- errorResp
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user