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
Этот коммит содержится в:
Joram Wilander
2017-04-01 11:39:13 -04:00
коммит произвёл GitHub
родитель d39947f539
Коммит 95da05a8c9
7 изменённых файлов: 41 добавлений и 46 удалений

Просмотреть файл

@@ -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
}