@Override public void removeProcessor(PacketProcessor processor) { checkPermission(PACKET_EVENT); checkNotNull(processor, ERROR_NULL_PROCESSOR); // Remove the processor entry. for (int i = 0; i < processors.size(); i++) { if (processors.get(i).processor() == processor) { processors.remove(i); break; } } }
@Override public void processPacket(PacketContext context) { // TODO filter packets sent to processors based on registrations for (ProcessorEntry entry : processors) { try { if (log.isTraceEnabled()) { log.trace("Starting packet processing by {}", entry.processor().getClass().getName()); } long start = System.nanoTime(); entry.processor().process(context); entry.addNanos(System.nanoTime() - start); if (log.isTraceEnabled()) { log.trace("Finished packet processing by {}", entry.processor().getClass().getName()); } } catch (Exception e) { log.warn("Packet processor {} threw an exception", entry.processor(), e); } } }
@Override public void addProcessor(PacketProcessor processor, int priority) { checkPermission(PACKET_EVENT); checkNotNull(processor, ERROR_NULL_PROCESSOR); ProcessorEntry entry = new ProcessorEntry(processor, priority); // Insert the new processor according to its priority. int i = 0; for (; i < processors.size(); i++) { if (priority < processors.get(i).priority()) { break; } } processors.add(i, entry); }