public void addHandler(Handler<T> handler, DefaultContext context) { EventLoop worker = context.getEventLoop(); availableWorkers.addWorker(worker); Handlers<T> handlers = new Handlers<T>(); Handlers<T> prev = handlerMap.putIfAbsent(worker, handlers); if (prev != null) { handlers = prev; } handlers.addHandler(new HandlerHolder<>(context, handler)); handlerCount++; }
public void removeHandler(Handler<T> handler, DefaultContext context) { EventLoop worker = context.getEventLoop(); Handlers<T> handlers = handlerMap.get(worker); if (!handlers.removeHandler(new HandlerHolder<>(context, handler))) { throw new IllegalStateException("Can't find handler"); } if (handlers.isEmpty()) { handlerMap.remove(worker); } handlerCount--; // Available workers does it's own reference counting -since workers can be shared across // different Handlers availableWorkers.removeWorker(worker); }