package com.huixinpn.dionysus.service.impl;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.huixinpn.dionysus.domain.user.User;
import com.huixinpn.dionysus.repository.user.UserRepository;
import java.util.HashMap;
import java.util.concurrent.TimeUnit;
/**
* Created by huanghao on 7/13/15.
*/
public class RoomState {
private UserRepository userRepository;
private LoadingCache<String, UserState> statsByUser = CacheBuilder.newBuilder()
.expireAfterAccess(5, TimeUnit.MINUTES)
.maximumSize(100)
.build(new CacheLoader<String, UserState>() {
@Override
public UserState load(String key) throws Exception {
User user = userRepository.findByUsername(key);
return new UserState(key, user.getAvatar(), user.getId());
}
});
public RoomState(UserRepository userRepository){
this.userRepository = userRepository;
}
public void mark(String username){
statsByUser.getUnchecked(username).mark();
}
public HashMap<String, UserState> getActiveUsers(){
HashMap<String, UserState> active = new HashMap<>();
for (String user : statsByUser.asMap().keySet()) {
// has the user checked in within the last 10 seconds?
if ((System.currentTimeMillis() - statsByUser.getUnchecked(user).getLastAccess()) < 11000) {
active.put(user, statsByUser.getUnchecked(user));
}
}
return active;
}
}