@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); selectable.terminate(); reactor.update(selectable); } };
@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); selectable.terminate(); reactor.update(selectable); } };
private void handleTransport(Reactor reactor, Event event) { TransportImpl transport = (TransportImpl)event.getTransport(); Selectable selectable = transport.getSelectable(); if (selectable != null && !selectable.isTerminal()) { update(selectable); reactor.update(selectable); } }
private void handleTransport(Reactor reactor, Event event) { TransportImpl transport = (TransportImpl)event.getTransport(); Selectable selectable = transport.getSelectable(); if (selectable != null && !selectable.isTerminal()) { update(selectable); reactor.update(selectable); } }
@Override public void close() { if (!sel.isTerminal()) { Reactor reactor = sel.getReactor(); try { sel.getChannel().close(); } catch(IOException ioException) { // Ignore. } sel.setChannel(null); sel.terminate(); reactor.update(sel); } }
@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); Transport transport = ((SelectableImpl)selectable).getTransport(); int capacity = transport.capacity(); if (capacity > 0) { SocketChannel socketChannel = (SocketChannel)selectable.getChannel(); try { int n = socketChannel.read(transport.tail()); if (n == -1) { transport.close_tail(); } else { transport.process(); } } catch (IOException e) { ErrorCondition condition = new ErrorCondition(); condition.setCondition(Symbol.getSymbol("proton:io")); condition.setDescription(e.getMessage()); transport.setCondition(condition); transport.close_tail(); } } // (Comment from C code:) occasionally transport events aren't // generated when expected, so the following hack ensures we // always update the selector update(selectable); reactor.update(selectable); } };
@Override public void close() { if (!sel.isTerminal()) { Reactor reactor = sel.getReactor(); try { sel.getChannel().close(); } catch(IOException ioException) { // Ignore. } sel.setChannel(null); sel.terminate(); reactor.update(sel); } }
@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); Transport transport = ((SelectableImpl)selectable).getTransport(); int capacity = transport.capacity(); if (capacity > 0) { SocketChannel socketChannel = (SocketChannel)selectable.getChannel(); try { int n = socketChannel.read(transport.tail()); if (n == -1) { transport.close_tail(); } else { transport.process(); } } catch (IOException | TransportException e) { ErrorCondition condition = new ErrorCondition(); condition.setCondition(Symbol.getSymbol("proton:io")); condition.setDescription(e.getMessage()); transport.setCondition(condition); transport.close_tail(); } } // (Comment from C code:) occasionally transport events aren't // generated when expected, so the following hack ensures we // always update the selector update(selectable); reactor.update(selectable); } };
@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); Transport transport = ((SelectableImpl)selectable).getTransport(); long deadline = transport.tick(reactor.now()); selectable.setDeadline(deadline); int c = capacity(selectable); int p = pending(selectable); selectable.setReading(c > 0); selectable.setWriting(p > 0); reactor.update(selectable); } };
private void initializeSelectable() { Selectable schedulerSelectable = this.reactor.selectable(); schedulerSelectable.setChannel(this.ioSignal.source()); schedulerSelectable.onReadable(this.workScheduler); schedulerSelectable.onFree(new CloseHandler()); schedulerSelectable.setReading(true); this.reactor.update(schedulerSelectable); }
private void initializeSelectable() { Selectable schedulerSelectable = this.reactor.selectable(); schedulerSelectable.setChannel(this.ioSignal.source()); schedulerSelectable.onReadable(this.workScheduler); schedulerSelectable.onFree(new CloseHandler()); schedulerSelectable.setReading(true); this.reactor.update(schedulerSelectable); }
@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); Transport transport = ((SelectableImpl)selectable).getTransport(); long deadline = transport.tick(reactor.now()); selectable.setDeadline(deadline); int c = capacity(selectable); int p = pending(selectable); selectable.setReading(c > 0); selectable.setWriting(p > 0); reactor.update(selectable); } };
@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); Transport transport = ((SelectableImpl)selectable).getTransport(); int pending = transport.pending(); if (pending > 0) { SocketChannel channel = (SocketChannel)selectable.getChannel(); try { int n = channel.write(transport.head()); if (n < 0) { transport.close_head(); } else { transport.pop(n); } } catch(IOException ioException) { ErrorCondition condition = new ErrorCondition(); condition.setCondition(Symbol.getSymbol("proton:io")); condition.setDescription(ioException.getMessage()); transport.setCondition(condition); transport.close_head(); } } int newPending = transport.pending(); if (newPending != pending) { update(selectable); reactor.update(selectable); } } };
@Override public void run(Selectable selectable) { Reactor reactor = selectable.getReactor(); Transport transport = ((SelectableImpl)selectable).getTransport(); int pending = transport.pending(); if (pending > 0) { SocketChannel channel = (SocketChannel)selectable.getChannel(); try { int n = channel.write(transport.head()); if (n < 0) { transport.close_head(); } else { transport.pop(n); } } catch(IOException ioException) { ErrorCondition condition = new ErrorCondition(); condition.setCondition(Symbol.getSymbol("proton:io")); condition.setDescription(ioException.getMessage()); transport.setCondition(condition); transport.close_head(); } } int newPending = transport.pending(); if (newPending != pending) { update(selectable); reactor.update(selectable); } } };
protected AcceptorImpl(Reactor reactor, String host, int port, Handler handler) throws IOException { ServerSocketChannel ssc = ((ReactorImpl)reactor).getIO().serverSocketChannel(); ssc.bind(new InetSocketAddress(host, port)); sel = ((ReactorImpl)reactor).selectable(this); sel.setChannel(ssc); sel.onReadable(new AcceptorReadable()); sel.onFree(new AcceptorFree()); sel.setReactor(reactor); BaseHandler.setHandler(this, handler); sel.setReading(true); reactor.update(sel); }
protected AcceptorImpl(Reactor reactor, String host, int port, Handler handler) throws IOException { ServerSocketChannel ssc = ((ReactorImpl)reactor).getIO().serverSocketChannel(); ssc.bind(new InetSocketAddress(host, port)); sel = ((ReactorImpl)reactor).selectable(this); sel.setChannel(ssc); sel.onReadable(new AcceptorReadable()); sel.onFree(new AcceptorFree()); sel.setReactor(reactor); BaseHandler.setHandler(this, handler); sel.setReading(true); reactor.update(sel); }
protected static Selectable selectableTransport(Reactor reactor, Socket socket, Transport transport) { Selectable selectable = reactor.selectable(); selectable.setChannel(socket != null ? socket.getChannel() : null); selectable.onReadable(connectionReadable); selectable.onWritable(connectionWritable); selectable.onError(connectionError); selectable.onExpired(connectionExpired); selectable.onFree(connectionFree); ((SelectableImpl)selectable).setTransport(transport); ((TransportImpl)transport).setSelectable(selectable); ((TransportImpl)transport).setReactor(reactor); update(selectable); reactor.update(selectable); return selectable; }
protected static Selectable selectableTransport(Reactor reactor, Socket socket, Transport transport) { Selectable selectable = reactor.selectable(); selectable.setChannel(socket != null ? socket.getChannel() : null); selectable.onReadable(connectionReadable); selectable.onWritable(connectionWritable); selectable.onError(connectionError); selectable.onExpired(connectionExpired); selectable.onFree(connectionFree); ((SelectableImpl)selectable).setTransport(transport); ((TransportImpl)transport).setSelectable(selectable); ((TransportImpl)transport).setReactor(reactor); update(selectable); reactor.update(selectable); return selectable; }