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.repository.chat.RoomRepository;
import com.huixinpn.dionysus.repository.user.UserRepository;
import com.huixinpn.dionysus.service.ActiveUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* Created by huanghao on 7/13/15.
*/
@Service
public class ActiveUser implements ActiveUserService {
@Autowired
private UserRepository userRepository;
@Autowired
private RoomRepository roomRepository;
private LoadingCache<String, RoomState> statsByRoom = CacheBuilder.newBuilder()
.expireAfterAccess(5, TimeUnit.MINUTES)
.maximumSize(50)
.build(new CacheLoader<String, RoomState>() {
@Override
public RoomState load(String key) throws Exception {
return new RoomState(userRepository);
}
});
@Override
public void mark(String roomId, String username) {
statsByRoom.getUnchecked(roomId).mark(username);
}
@Override
public HashMap<String, UserState> getActiveUsers(String roomId) {
return statsByRoom.getUnchecked(roomId).getActiveUsers();
}
@Override
public Set<String> getActiveRooms() {
return statsByRoom.asMap().keySet();
}
@Override
public UserState getActiveUser(String roomId, String username) {
return statsByRoom.getUnchecked(roomId).getActiveUsers().get(username);
}
}