|
|
|
@ -128,106 +128,6 @@ func (u *UserCacheRedis) DelUsersGlobalRecvMsgOpt(userIDs ...string) cache.UserC
|
|
|
|
|
return cache
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
type RedisUserOnline struct {
|
|
|
|
|
// 平台id, 平台更新时间
|
|
|
|
|
PlatformIDs map[int32]int64
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetUserStatus get user status.
|
|
|
|
|
//func (u *UserCacheRedis) GetUserStatus(ctx context.Context, userIDs []string) ([]*user.OnlineStatus, error) {
|
|
|
|
|
// userStatus := make([]*user.OnlineStatus, 0, len(userIDs))
|
|
|
|
|
// for _, userID := range userIDs {
|
|
|
|
|
// UserIDNum := crc32.ChecksumIEEE([]byte(userID))
|
|
|
|
|
// modKey := strconv.Itoa(int(UserIDNum % statusMod))
|
|
|
|
|
// var onlineStatus user.OnlineStatus
|
|
|
|
|
// key := u.getOnlineStatusKey(modKey)
|
|
|
|
|
// result, err := u.rdb.HGet(ctx, key, userID).Result()
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// if errors.Is(err, redis.Nil) {
|
|
|
|
|
// // key or field does not exist
|
|
|
|
|
// userStatus = append(userStatus, &user.OnlineStatus{
|
|
|
|
|
// UserID: userID,
|
|
|
|
|
// Status: constant.Offline,
|
|
|
|
|
// PlatformIDs: nil,
|
|
|
|
|
// })
|
|
|
|
|
//
|
|
|
|
|
// continue
|
|
|
|
|
// } else {
|
|
|
|
|
// return nil, errs.Wrap(err)
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// err = json.Unmarshal([]byte(result), &onlineStatus)
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// return nil, errs.Wrap(err)
|
|
|
|
|
// }
|
|
|
|
|
// onlineStatus.UserID = userID
|
|
|
|
|
// onlineStatus.Status = constant.Online
|
|
|
|
|
// userStatus = append(userStatus, &onlineStatus)
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// return userStatus, nil
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
// SetUserStatus Set the user status and save it in redis.
|
|
|
|
|
//func (u *UserCacheRedis) SetUserStatus(ctx context.Context, userID string, status, platformID int32) error {
|
|
|
|
|
// UserIDNum := crc32.ChecksumIEEE([]byte(userID))
|
|
|
|
|
// modKey := strconv.Itoa(int(UserIDNum % statusMod))
|
|
|
|
|
// key := u.getOnlineStatusKey(modKey)
|
|
|
|
|
// log.ZDebug(ctx, "SetUserStatus args", "userID", userID, "status", status, "platformID", platformID, "modKey", modKey, "key", key)
|
|
|
|
|
// isNewKey, err := u.rdb.Exists(ctx, key).Result()
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// return errs.Wrap(err)
|
|
|
|
|
// }
|
|
|
|
|
// if isNewKey == 0 {
|
|
|
|
|
// if status == constant.Online {
|
|
|
|
|
// onlineStatus := user.OnlineStatus{
|
|
|
|
|
// UserID: userID,
|
|
|
|
|
// Status: constant.Online,
|
|
|
|
|
// PlatformIDs: []int32{platformID},
|
|
|
|
|
// }
|
|
|
|
|
// jsonData, err := json.Marshal(&onlineStatus)
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// return errs.Wrap(err)
|
|
|
|
|
// }
|
|
|
|
|
// _, err = u.rdb.HSet(ctx, key, userID, string(jsonData)).Result()
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// return errs.Wrap(err)
|
|
|
|
|
// }
|
|
|
|
|
// u.rdb.Expire(ctx, key, userOlineStatusExpireTime)
|
|
|
|
|
//
|
|
|
|
|
// return nil
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// isNil := false
|
|
|
|
|
// result, err := u.rdb.HGet(ctx, key, userID).Result()
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// if errors.Is(err, redis.Nil) {
|
|
|
|
|
// isNil = true
|
|
|
|
|
// } else {
|
|
|
|
|
// return errs.Wrap(err)
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// if status == constant.Offline {
|
|
|
|
|
// err = u.refreshStatusOffline(ctx, userID, status, platformID, isNil, err, result, key)
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// return err
|
|
|
|
|
// }
|
|
|
|
|
// } else {
|
|
|
|
|
// err = u.refreshStatusOnline(ctx, userID, platformID, isNil, err, result, key)
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// return errs.Wrap(err)
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// return nil
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
func (u *UserCacheRedis) refreshStatusOffline(ctx context.Context, userID string, status, platformID int32, isNil bool, err error, result, key string) error {
|
|
|
|
|
if isNil {
|
|
|
|
|
log.ZWarn(ctx, "this user not online,maybe trigger order not right",
|
|
|
|
|