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"); } }
public void unregister(MsgHandler handler) { if (handler == null) { throw new IllegalArgumentException("unregister handler cannot be null"); } int[] interests = handler.getInterests(); if (interests == null) { for (Integer interest : interests) { Set<MsgHandler> msgHandlers = handlers.get(interest); if (msgHandlers != null) { msgHandlers.remove(handler); } } } else { throw new IllegalArgumentException("unregister handler which has no interest"); } }