LinkProcessorSlotChain.java 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. package cn.nosum.gateway.slot;
  2. import cn.nosum.common.annotation.Adaptive;
  3. import cn.nosum.common.http.entity.Context;
  4. @Adaptive
  5. public class LinkProcessorSlotChain implements ProcessorSlotChain {
  6. AbstractLinkedProcessorSlot<Context> first = new AbstractLinkedProcessorSlot<Context>() {
  7. @Override
  8. public void exec(Context context) throws Throwable {
  9. this.fireExec(context);
  10. }
  11. };
  12. AbstractLinkedProcessorSlot<Context> end = first;
  13. @Override
  14. public void addFirst(AbstractLinkedProcessorSlot<Context> protocolProcessor) {
  15. protocolProcessor.setNext(first.getNext());
  16. first.setNext(protocolProcessor);
  17. if (end == first) {
  18. end = protocolProcessor;
  19. }
  20. }
  21. @Override
  22. public void addLast(AbstractLinkedProcessorSlot<Context> protocolProcessor) {
  23. end.setNext(protocolProcessor);
  24. end = protocolProcessor;
  25. }
  26. @Override
  27. public void exec(Context context) throws Throwable {
  28. first.exec(context);
  29. }
  30. }