package com.mogujie.tt.biz;
import java.util.ArrayList;
import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import android.os.Handler;
import android.os.Message;
import com.mogujie.tt.config.SysConstant;
/**
* @Description 消息通知中心
* @date 2014-7-12
*/
public class MessageNotifyCenter {
private static List<Integer> eventList = Collections
.synchronizedList(new ArrayList<Integer>());// 消息事件
private static Map<Integer, Map<Integer, Handler>> hmEventHandlers = new ConcurrentHashMap<Integer, Map<Integer, Handler>>(); // 消息通知
private static MessageNotifyCenter instance = null;
public static MessageNotifyCenter getInstance() {
if (null == instance) {
instance = new MessageNotifyCenter();
}
return instance;
}
private MessageNotifyCenter() {
eventList.add(SysConstant.EVENT_UNREAD_MSG);
eventList.add(SysConstant.EVENT_RECENT_INFO_CHANGED);
}
/*
* 清空所有注册的事件通知
*/
public void clear() {
hmEventHandlers.clear();
}
/*
* 通知
*/
public void doNotify(int event) {
if (0 == eventList.size()) {
return;
}
Map<Integer, Handler> eventHandlerList = hmEventHandlers.get(event);
if (null == eventHandlerList) {
return;
}
for (Entry<Integer, Handler> entry : eventHandlerList.entrySet())
{
doNotify(entry);
}
}
private void doNotify(Entry<Integer, Handler> entry) {
if (null == entry) {
return;
}
Handler handler = entry.getValue();
Integer msg = entry.getKey();
Message message = handler.obtainMessage();
message.what = msg;
handler.sendMessage(message);
}
/*
* 注册一个事件消息通知
*/
public Boolean register(Integer event, Handler handler, Integer message) {
if (!eventList.contains(event)) {
return false; // 不支持的消息通知事件
}
Map<Integer, Handler> eventHandlerList = null;
if (!hmEventHandlers.containsKey(event)) {
// 新注册事件,不存在则新加一个
eventHandlerList = new IdentityHashMap<Integer, Handler>();
eventHandlerList.put(message, handler);
hmEventHandlers.put(event, eventHandlerList);
return true;
}
// 已注册事件
eventHandlerList = hmEventHandlers.get(event);
if (!eventHandlerList.containsKey(message)) {
// 已注册事件,但没有注册该消息通知
eventHandlerList.put(message, handler);
hmEventHandlers.put(event, eventHandlerList);
}
return true;
}
/*
* 反注册一个事件消息通知
*/
public Boolean unregister(Integer event, Handler handler, int message) {
if (!eventList.contains(event) || null == handler) {
return false; // 不支持的消息通知事件
}
Map<Integer, Handler> eventHandlerList;
if (!hmEventHandlers.containsKey(event)) {
return true; // 未注册事件
}
// 已注册事件
eventHandlerList = hmEventHandlers.get(event);
if (!eventHandlerList.containsKey(message)) {
return true; // 事件已注册,但没有注册该事件消息通知
}
eventHandlerList.remove(message);
hmEventHandlers.put(event, eventHandlerList);
return true;
}
}