package org.jivesoftware.openfire.muc.spi;
import java.util.Collection;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.jivesoftware.openfire.event.GroupEventDispatcher;
import org.jivesoftware.openfire.muc.MUCRoom;
/**
* this class supports the simple LocalMUCRoom management including remove,add and query.
* @author <a href="mailto:583424568@qq.com">wuchang</a>
* 2016-1-14
*/
public class LocalMUCRoomManager {
private Map<String, LocalMUCRoom> rooms = new ConcurrentHashMap<>();
public int getNumberChatRooms(){
return rooms.size();
}
public void addRoom(String roomname,LocalMUCRoom room){
rooms.put(roomname, room);
GroupEventDispatcher.addListener(room);
}
public Collection<LocalMUCRoom> getRooms(){
return rooms.values();
}
public LocalMUCRoom getRoom(String roomname){
return rooms.get(roomname);
}
public MUCRoom removeRoom(String roomname){
//memory leak will happen if we forget remove it from GroupEventDispatcher
if(rooms.containsKey(roomname))
GroupEventDispatcher.removeListener((LocalMUCRoom) rooms.get(roomname));
return rooms.remove(roomname);
}
public void cleanupRooms(Date cleanUpDate) {
for (MUCRoom room : getRooms()) {
if (room.getEmptyDate() != null && room.getEmptyDate().before(cleanUpDate)) {
removeRoom(room.getName());
}
}
}
}