public void register(MsgHandler handler) { if (handler == null) { throw new IllegalArgumentException("register handler cannot be null"); } int[] interests = handler.getInterests(); if (interests != null) { for (Integer interest : interests) { Set<MsgHandler> msgHandlers = handlers.get(interest); if (msgHandlers == null) { CopyOnWriteArraySet<MsgHandler> created = new CopyOnWriteArraySet<>(); msgHandlers = handlers.putIfAbsent(interest, msgHandlers); if (msgHandlers == null) { msgHandlers = created; } } msgHandlers.add(handler); } for (Integer interest : interests) { Msg msg = stickyMsg.get(interest); if (msg != null) { handler.onMsg(msg); } } } else { throw new IllegalArgumentException("register handler which has no interest"); } }
private void post(Msg msg, boolean stick) { Integer what = msg.what(); Set<MsgHandler> msgHandlers = handlers.get(what); if (msgHandlers != null && !msgHandlers.isEmpty()) { for (MsgHandler h : msgHandlers) { h.onMsg(msg); } } else { if (!stick) { logger.warning("post: dead event: " + msg); } } if (stick) { stickyMsg.put(what, msg); } }