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()); } } } }