diff --git a/internal/msg_gateway/gate/callback.go b/internal/msg_gateway/gate/callback.go index 1b8c29a90..b2f15035e 100644 --- a/internal/msg_gateway/gate/callback.go +++ b/internal/msg_gateway/gate/callback.go @@ -9,7 +9,7 @@ import ( "time" ) -func callbackUserOnline(operationID, userID string, platformID int, token string) cbApi.CommonCallbackResp { +func callbackUserOnline(operationID, userID string, platformID int, token string, isAppBackgroundStatusChanged bool) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackUserOnline.Enable { return callbackResp @@ -25,7 +25,8 @@ func callbackUserOnline(operationID, userID string, platformID int, token string }, UserID: userID, }, - Seq: int(time.Now().UnixNano() / 1e6), + Seq: int(time.Now().UnixNano() / 1e6), + IsAppBackgroundStatusChanged: isAppBackgroundStatusChanged, } callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: &callbackResp} if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserOnlineCommand, callbackUserOnlineReq, callbackUserOnlineResp, config.Config.Callback.CallbackUserOnline.CallbackTimeOut); err != nil { @@ -35,7 +36,7 @@ func callbackUserOnline(operationID, userID string, platformID int, token string return callbackResp } -func callbackUserOffline(operationID, userID string, platformID int) cbApi.CommonCallbackResp { +func callbackUserOffline(operationID, userID string, platformID int, isAppBackgroundStatusChanged bool) cbApi.CommonCallbackResp { callbackResp := cbApi.CommonCallbackResp{OperationID: operationID} if !config.Config.Callback.CallbackUserOffline.Enable { return callbackResp @@ -50,7 +51,8 @@ func callbackUserOffline(operationID, userID string, platformID int) cbApi.Commo }, UserID: userID, }, - Seq: int(time.Now().UnixNano() / 1e6), + Seq: int(time.Now().UnixNano() / 1e6), + IsAppBackgroundStatusChanged: isAppBackgroundStatusChanged, } callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: &callbackResp} if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserOfflineCommand, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil { diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index dce29aa11..22c9885a1 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -403,6 +403,17 @@ func (ws *WServer) setUserDeviceBackground(conn *UserConn, m *Req) { if isPass { req := pData.(*sdk_ws.SetAppBackgroundStatusReq) conn.IsBackground = req.IsBackground + if req.IsBackground { + callbackResp := callbackUserOffline(m.OperationID, conn.userID, int(conn.platformID), true) + if callbackResp.ErrCode != 0 { + log.NewError(m.OperationID, utils.GetSelfFuncName(), "callbackUserOffline failed", callbackResp) + } + } else { + callbackResp := callbackUserOnline(m.OperationID, conn.userID, int(conn.platformID), conn.token, true) + if callbackResp.ErrCode != 0 { + log.NewError(m.OperationID, utils.GetSelfFuncName(), "callbackUserOffline failed", callbackResp) + } + } log.NewInfo(m.OperationID, "SetUserDeviceBackground", "success", *conn, req.IsBackground) } ws.setUserDeviceBackgroundResp(conn, m, errCode, errMsg) diff --git a/internal/msg_gateway/gate/ws_server.go b/internal/msg_gateway/gate/ws_server.go index 0c558e870..448e4863f 100644 --- a/internal/msg_gateway/gate/ws_server.go +++ b/internal/msg_gateway/gate/ws_server.go @@ -36,6 +36,7 @@ type UserConn struct { IsCompress bool userID string IsBackground bool + token string } type WServer struct { @@ -86,7 +87,7 @@ func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { log.NewDebug(operationID, query["sendID"][0], "enable compression") isCompress = true } - newConn := &UserConn{conn, new(sync.Mutex), utils.StringToInt32(query["platformID"][0]), 0, isCompress, query["sendID"][0], false} + newConn := &UserConn{conn, new(sync.Mutex), utils.StringToInt32(query["platformID"][0]), 0, isCompress, query["sendID"][0], false, query["token"][0]} userCount++ ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0], operationID) go ws.readMsg(newConn) @@ -327,7 +328,7 @@ func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token rwLock.Lock() defer rwLock.Unlock() log.Info(operationID, utils.GetSelfFuncName(), " args: ", uid, platformID, conn, token, "ip: ", conn.RemoteAddr().String()) - callbackResp := callbackUserOnline(operationID, uid, platformID, token) + callbackResp := callbackUserOnline(operationID, uid, platformID, token, false) if callbackResp.ErrCode != 0 { log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOnline resp:", callbackResp) } @@ -390,7 +391,7 @@ func (ws *WServer) delUserConn(conn *UserConn) { if err != nil { log.Error(operationID, " close err", "", "uid", uid, "platform", platform) } - callbackResp := callbackUserOffline(operationID, conn.userID, platform) + callbackResp := callbackUserOffline(operationID, conn.userID, platform, false) if callbackResp.ErrCode != 0 { log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOffline failed", callbackResp) } diff --git a/pkg/call_back_struct/msg_gateway.go b/pkg/call_back_struct/msg_gateway.go index df3219339..87d07c19f 100644 --- a/pkg/call_back_struct/msg_gateway.go +++ b/pkg/call_back_struct/msg_gateway.go @@ -2,8 +2,9 @@ package call_back_struct type CallbackUserOnlineReq struct { UserStatusCallbackReq - Token string `json:"token"` - Seq int `json:"seq"` + Token string `json:"token"` + Seq int `json:"seq"` + IsAppBackgroundStatusChanged bool `json:"isAppBackgroundStatusChanged"` } type CallbackUserOnlineResp struct { @@ -12,7 +13,8 @@ type CallbackUserOnlineResp struct { type CallbackUserOfflineReq struct { UserStatusCallbackReq - Seq int `json:"seq"` + Seq int `json:"seq"` + IsAppBackgroundStatusChanged bool `json:"isAppBackgroundStatusChanged"` } type CallbackUserOfflineResp struct {