Detach session activity update from statuses (#6379)

Этот коммит содержится в:
Joram Wilander
2017-05-10 09:48:50 -04:00
коммит произвёл GitHub
родитель b868aa1dc7
Коммит 0ae6886513
6 изменённых файлов: 30 добавлений и 13 удалений

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

@@ -181,3 +181,17 @@ func AttachDeviceId(sessionId string, deviceId string, expiresAt int64) *model.A
return nil
}
func UpdateLastActivityAtIfNeeded(session model.Session) {
now := model.GetMillis()
if now-session.LastActivityAt < model.SESSION_ACTIVITY_TIMEOUT {
return
}
if result := <-Srv.Store.Session().UpdateLastActivityAt(session.Id, now); result.Err != nil {
l4g.Error(utils.T("api.status.last_activity.error", session.UserId, session.Id))
}
session.LastActivityAt = now
AddSessionToCache(&session)
}

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

@@ -195,7 +195,6 @@ func SetStatusOnline(userId string, sessionId string, manual bool) {
// Only update the database if the status has changed, the status has been manually set,
// or enough time has passed since the previous action
if status.Status != oldStatus || status.Manual != oldManual || status.LastActivityAt-oldTime > model.STATUS_MIN_UPDATE_TIME {
achan := Srv.Store.Session().UpdateLastActivityAt(sessionId, status.LastActivityAt)
var schan store.StoreChannel
if broadcast {
@@ -204,10 +203,6 @@ func SetStatusOnline(userId string, sessionId string, manual bool) {
schan = Srv.Store.Status().UpdateLastActivityAt(status.UserId, status.LastActivityAt)
}
if result := <-achan; result.Err != nil {
l4g.Error(utils.T("api.status.last_activity.error"), userId, sessionId, result.Err)
}
if result := <-schan; result.Err != nil {
l4g.Error(utils.T("api.status.save_status.error"), userId, result.Err)
}

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

@@ -43,7 +43,10 @@ type WebConn struct {
func NewWebConn(ws *websocket.Conn, session model.Session, t goi18n.TranslateFunc, locale string) *WebConn {
if len(session.UserId) > 0 {
go SetStatusOnline(session.UserId, session.Id, false)
go func() {
SetStatusOnline(session.UserId, session.Id, false)
UpdateLastActivityAtIfNeeded(session)
}()
}
return &WebConn{

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

@@ -53,7 +53,10 @@ func (wr *WebSocketRouter) ServeWebSocket(conn *WebConn, r *model.WebSocketReque
if err != nil {
conn.WebSocket.Close()
} else {
go SetStatusOnline(session.UserId, session.Id, false)
go func() {
SetStatusOnline(session.UserId, session.Id, false)
UpdateLastActivityAtIfNeeded(*session)
}()
conn.SessionToken = session.Token
conn.UserId = session.UserId