public ChannelHandler(final SelectionKey key, final D dispatcher, final Charset charset, final EventFactory<E> eventFactory, final BlockingQueue<E> events, final ComponentLog logger) { this.key = key; this.dispatcher = dispatcher; this.charset = charset; this.eventFactory = eventFactory; this.logger = logger; this.events = new EventQueue<E>(events, logger); }
events.offer(event);
final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); final E event = eventFactory.create(currBytes.toByteArray(), metadata, response); events.offer(event); currBytes.reset();
/** * Process the contents of the buffer. Give sub-classes a chance to override this behavior. * * @param sslSocketChannel the channel the data was read from * @param socketChannel the socket channel being wrapped by sslSocketChannel * @param bytesRead the number of bytes read * @param buffer the buffer to process * @throws InterruptedException thrown if interrupted while queuing events */ protected void processBuffer(final SSLSocketChannel sslSocketChannel, final SocketChannel socketChannel, final int bytesRead, final byte[] buffer) throws InterruptedException, IOException { final InetAddress sender = socketChannel.socket().getInetAddress(); // go through the buffer looking for the end of each message for (int i = 0; i < bytesRead; i++) { final byte currByte = buffer[i]; // check if at end of a message if (currByte == getDelimiter()) { if (currBytes.size() > 0) { final SSLSocketChannelResponder response = new SSLSocketChannelResponder(socketChannel, sslSocketChannel); final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); final E event = eventFactory.create(currBytes.toByteArray(), metadata, response); events.offer(event); currBytes.reset(); } } else { currBytes.write(currByte); } } }
public DatagramChannelDispatcher(final EventFactory<E> eventFactory, final BlockingQueue<ByteBuffer> bufferPool, final BlockingQueue<E> events, final ComponentLog logger, final String sendingHost, final Integer sendingPort) { this.eventFactory = eventFactory; this.bufferPool = bufferPool; this.logger = logger; this.sendingHost = sendingHost; this.sendingPort = sendingPort; this.events = new EventQueue<>(events, logger); if (bufferPool == null || bufferPool.size() == 0) { throw new IllegalArgumentException("A pool of available ByteBuffers is required"); } }
events.offer(event); } else if (frame.getFrameType() == 0x4A ) { logger.error("Data type was JSON. JSON payload aren't yet supported, pending the documentation of Lumberjack protocol v2");
public BeatsFrameHandler(final SelectionKey selectionKey, final Charset charset, final EventFactory<E> eventFactory, final BlockingQueue<E> events, final AsyncChannelDispatcher dispatcher, final ComponentLog logger) { this.key = selectionKey; this.charset = charset; this.eventFactory = eventFactory; this.dispatcher = dispatcher; this.logger = logger; this.events = new EventQueue<>(events, logger); this.encoder = new BeatsEncoder(); }
public void handle(final BeatsFrame frame, final ChannelResponder<SocketChannel> responder, final String sender) throws IOException, InterruptedException { final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); metadata.put(BeatsMetadata.SEQNUMBER_KEY, String.valueOf(frame.getSeqNumber())); String line = ""; /* If frameType is a JSON , parse the frame payload into a JsonElement so that all JSON elements but "message" are inserted into the event metadata. As per above, the "message" element gets added into the body of the event */ if (frame.getFrameType() == FRAME_JSON ) { // queue the raw event blocking until space is available, reset the buffer final E event = eventFactory.create(frame.getPayload(), metadata, responder); events.offer(event); } } }
public RELPFrameHandler(final SelectionKey selectionKey, final Charset charset, final EventFactory<E> eventFactory, final BlockingQueue<E> events, final AsyncChannelDispatcher dispatcher, final ComponentLog logger) { this.key = selectionKey; this.charset = charset; this.eventFactory = eventFactory; this.dispatcher = dispatcher; this.logger = logger; this.events = new EventQueue<>(events, logger); this.encoder = new RELPEncoder(charset); }
public void handle(final RELPFrame frame, final ChannelResponder<SocketChannel> responder, final String sender) throws IOException, InterruptedException { // respond to open and close commands immediately, create and queue an event for everything else if (CMD_OPEN.equals(frame.getCommand())) { Map<String,String> offers = RELPResponse.parseOffers(frame.getData(), charset); ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.open(frame.getTxnr(), offers)); responder.addResponse(response); responder.respond(); } else if (CMD_CLOSE.equals(frame.getCommand())) { ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.ok(frame.getTxnr())); responder.addResponse(response); responder.respond(); dispatcher.completeConnection(key); } else { final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); metadata.put(RELPMetadata.TXNR_KEY, String.valueOf(frame.getTxnr())); metadata.put(RELPMetadata.COMMAND_KEY, frame.getCommand()); final E event = eventFactory.create(frame.getData(), metadata, responder); events.offer(event); } }
public LumberjackFrameHandler(final SelectionKey selectionKey, final Charset charset, final EventFactory<E> eventFactory, final BlockingQueue<E> events, final AsyncChannelDispatcher dispatcher, final ComponentLog logger) { this.key = selectionKey; this.charset = charset; this.eventFactory = eventFactory; this.dispatcher = dispatcher; this.logger = logger; this.events = new EventQueue<>(events, logger); this.encoder = new LumberjackEncoder(); }
public void handle(final BeatsFrame frame, final ChannelResponder<SocketChannel> responder, final String sender) throws IOException, InterruptedException { final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); metadata.put(BeatsMetadata.SEQNUMBER_KEY, String.valueOf(frame.getSeqNumber())); String line = ""; /* If frameType is a JSON , parse the frame payload into a JsonElement so that all JSON elements but "message" are inserted into the event metadata. As per above, the "message" element gets added into the body of the event */ if (frame.getFrameType() == FRAME_JSON ) { // queue the raw event blocking until space is available, reset the buffer final E event = eventFactory.create(frame.getPayload(), metadata, responder); events.offer(event); } } }
public RELPFrameHandler(final SelectionKey selectionKey, final Charset charset, final EventFactory<E> eventFactory, final BlockingQueue<E> events, final AsyncChannelDispatcher dispatcher, final ComponentLog logger) { this.key = selectionKey; this.charset = charset; this.eventFactory = eventFactory; this.dispatcher = dispatcher; this.logger = logger; this.events = new EventQueue<>(events, logger); this.encoder = new RELPEncoder(charset); }
public void handle(final RELPFrame frame, final ChannelResponder<SocketChannel> responder, final String sender) throws IOException, InterruptedException { // respond to open and close commands immediately, create and queue an event for everything else if (CMD_OPEN.equals(frame.getCommand())) { Map<String,String> offers = RELPResponse.parseOffers(frame.getData(), charset); ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.open(frame.getTxnr(), offers)); responder.addResponse(response); responder.respond(); } else if (CMD_CLOSE.equals(frame.getCommand())) { ChannelResponse response = new RELPChannelResponse(encoder, RELPResponse.ok(frame.getTxnr())); responder.addResponse(response); responder.respond(); dispatcher.completeConnection(key); } else { final Map<String, String> metadata = EventFactoryUtil.createMapWithSender(sender.toString()); metadata.put(RELPMetadata.TXNR_KEY, String.valueOf(frame.getTxnr())); metadata.put(RELPMetadata.COMMAND_KEY, frame.getCommand()); final E event = eventFactory.create(frame.getData(), metadata, responder); events.offer(event); } }
public BeatsFrameHandler(final SelectionKey selectionKey, final Charset charset, final EventFactory<E> eventFactory, final BlockingQueue<E> events, final AsyncChannelDispatcher dispatcher, final ComponentLog logger) { this.key = selectionKey; this.charset = charset; this.eventFactory = eventFactory; this.dispatcher = dispatcher; this.logger = logger; this.events = new EventQueue<>(events, logger); this.encoder = new BeatsEncoder(); }