| | |
| | | package middleware |
| | | |
| | | import ( |
| | | "aps_crm/pkg/logx" |
| | | "context" |
| | | "fmt" |
| | | "sync" |
| | |
| | | intervalRefreshUserMinute: intervalRefreshUserMinute, |
| | | ctx: ctx, |
| | | cancel: cancel, |
| | | Users: map[string]*CurrentActiveUser{}, |
| | | } |
| | | } |
| | | |
| | |
| | | UserID: userID, |
| | | lastActiveTime: time.Now().Unix(), |
| | | } |
| | | logx.Infof("add active user :%+v", r.Users[userID]) |
| | | } else { |
| | | r.Users[userID].lastActiveTime = time.Now().Unix() |
| | | logx.Infof("refresh active time, user:%+v", r.Users[userID]) |
| | | } |
| | | } |
| | | |
| | |
| | | select { |
| | | case <-ticker.C: |
| | | nowTs := time.Now().Unix() |
| | | fmt.Println("it is time to RemoveInActiveUser:", nowTs) |
| | | var users []*CurrentActiveUser |
| | | r.mu.RLock() |
| | | for userID, user := range r.Users { |
| | | for _, user := range r.Users { |
| | | users = append(users, user) |
| | | } |
| | | r.mu.RUnlock() |
| | | for _, user := range users { |
| | | if nowTs-user.lastActiveTime > r.expireSecond { |
| | | r.mu.Lock() |
| | | delete(r.Users, userID) |
| | | logx.Infof("removed in active user:%+v", user) |
| | | delete(r.Users, user.UserID) |
| | | r.mu.Unlock() |
| | | } |
| | | } |
| | | r.mu.RUnlock() |
| | | case <-r.ctx.Done(): |
| | | fmt.Println("stop RemoveInActiveUser.") |
| | | return |
| | |
| | | for { |
| | | select { |
| | | case <-ticker.C: |
| | | nowTs := time.Now().Unix() |
| | | fmt.Println("it is time to RefreshUserInfo:", nowTs) |
| | | r.mu.RLock() |
| | | userIds := make([]string, len(r.Users)) |
| | | for userID := range r.Users { |
| | |
| | | } |
| | | r.mu.RUnlock() |
| | | if len(userIds) != 0 { |
| | | logx.Infof("RefreshUserInfo, user ids: ", userIds) |
| | | SyncUserInfo(userIds) |
| | | } |
| | | case <-r.ctx.Done(): |