package hall import ( "server/call" "server/common" "server/util" "time" "github.com/liangdas/mqant/log" ) // GetOnline 获取在线人数的func func GetOnline() []*common.ESNewOnline { total := map[int]int{} recharge := map[int]int{} newPlayer := map[int]int{} oldPlayer := map[int]int{} all := []int{} now := time.Now().Unix() offlines := []*player{} // 判断为已掉线玩家 playerIdMap.Range(func(k, v interface{}) bool { p := v.(*player) total[p.db.ChannelID]++ if p.isRecharge { recharge[p.db.ChannelID]++ } if !util.IsSameDayTimeStamp(time.Now().Unix(), p.db.Birth) { newPlayer[p.db.ChannelID]++ } else { oldPlayer[p.db.ChannelID]++ } // 上次登录在一天前,判定为掉线玩家 if now-p.lastLogin > 24*60*60 { offlines = append(offlines, p) } all = append(all, p.db.Id) return true }) log.Debug("onlines:%v", all) ret := []*common.ESNewOnline{} for i, v := range total { one := &common.ESNewOnline{Channel: i, Total: v, Recharge: recharge[i], New: newPlayer[i], Old: oldPlayer[i]} ret = append(ret, one) } util.Go(func() { for _, v := range offlines { log.Debug("player %v offline", v.db.Id) delPlayerBySession(v.session.GetSessionID()) delPlayerByID(v.db.Id) call.UpdateUserXInfo(&common.PlayerDBInfo{Id: v.db.Id}, map[string]interface{}{"online": 2}) } }) return ret } func GetRealOnline() map[int]*common.RedisRealOnline { rooms := map[int]*common.RedisRealOnline{} rooms[0] = new(common.RedisRealOnline) zero := util.GetZeroTime(time.Now()).Unix() playerIdMap.Range(func(k, v interface{}) bool { p := v.(*player) rooms[0].Total++ if p.db.Birth >= zero { rooms[0].New++ } return true }) return rooms }