List of usage examples for io.netty.util.concurrent GenericFutureListener GenericFutureListener
GenericFutureListener
From source file:org.eclipse.moquette.spi.impl.ProtocolProcessor.java
License:Open Source License
/** * redis?topicack//from www .j av a 2 s.com * * @param session * @param msg * @param ackMessage */ private void unSubscribeAsync(final ServerChannel session, final UnsubscribeMessage msg, final UnsubAckMessage ackMessage) { Future<Boolean> f = taskExecutors.submit(new Callable<Boolean>() { @Override public Boolean call() throws Exception { for (String topic : msg.topicFilters()) { TopicRouterRepository.clean(topic); } return true; } }); f.addListener(new GenericFutureListener<Future<Boolean>>() { @Override public void operationComplete(Future<Boolean> future) throws Exception { boolean result = future.getNow(); if (result) { session.write(ackMessage); } } }); }
From source file:org.eclipse.moquette.spi.impl.ProtocolProcessor.java
License:Open Source License
/** * topicredisack//from w ww .j av a 2 s . com * * @param session * @param msg * @param ackMessage */ private void subscribeAsync(final ServerChannel session, final SubscribeMessage msg, final SubAckMessage ackMessage) { Future<Boolean> f = taskExecutors.submit(new Callable<Boolean>() { @Override public Boolean call() throws Exception { for (SubscribeMessage.Couple req : msg.subscriptions()) { TopicRouterRepository.add(req.getTopicFilter()); } return true; } }); f.addListener(new GenericFutureListener<Future<Boolean>>() { @Override public void operationComplete(Future<Boolean> future) throws Exception { boolean result = future.getNow(); if (result) { session.write(ackMessage); } } }); }
From source file:org.eclipse.neoscada.protocol.iec60870.client.Client.java
License:Open Source License
public synchronized ListenableFuture<Void> connect() { if (this.connectFuture != null) { return this.connectFuture; }//from w w w .j a va2s .c o m final ChannelFuture channelFuture = this.bootstrap.connect(this.address); this.connectFuture = SettableFuture.create(); channelFuture.addListener(new GenericFutureListener<ChannelFuture>() { @Override public void operationComplete(final ChannelFuture future) throws Exception { handleOperationComplete(Client.this.connectFuture, future); } }); return this.connectFuture; }
From source file:org.eclipse.neoscada.protocol.iec60870.client.Client.java
License:Open Source License
@Override public void close() throws Exception { synchronized (this) { if (this.channel != null) { this.channel.close(); this.channel = null; }/*ww w.j a va2 s . c o m*/ for (final Module module : this.modules) { module.dispose(); } } logger.debug("Shutting down main group"); final Future<?> f = this.group.shutdownGracefully(); f.addListener(new GenericFutureListener<Future<Object>>() { @Override public void operationComplete(final Future<Object> arg0) throws Exception { disposeExecutor(); } }); }
From source file:org.fiware.kiara.netty.ListenableConstantFutureAdapter.java
License:Open Source License
@Override public void addListener(final Runnable r, final Executor exctr) { future.addListener(new GenericFutureListener() { @Override// w w w .j a v a 2s. c om public void operationComplete(Future future) throws Exception { exctr.execute(r); } }); }
From source file:org.glassfish.jersey.netty.connector.JerseyClientHandler.java
License:Open Source License
@Override public void channelRead0(ChannelHandlerContext ctx, HttpObject msg) { if (msg instanceof HttpResponse) { final HttpResponse response = (HttpResponse) msg; final ClientResponse jerseyResponse = new ClientResponse(new Response.StatusType() { @Override//from w w w .j a v a2 s . c o m public int getStatusCode() { return response.status().code(); } @Override public Response.Status.Family getFamily() { return Response.Status.Family.familyOf(response.status().code()); } @Override public String getReasonPhrase() { return response.status().reasonPhrase(); } }, jerseyRequest); for (Map.Entry<String, String> entry : response.headers().entries()) { jerseyResponse.getHeaders().add(entry.getKey(), entry.getValue()); } // request entity handling. if ((response.headers().contains(HttpHeaderNames.CONTENT_LENGTH) && HttpUtil.getContentLength(response) > 0) || HttpUtil.isTransferEncodingChunked(response)) { ctx.channel().closeFuture().addListener(new GenericFutureListener<Future<? super Void>>() { @Override public void operationComplete(Future<? super Void> future) throws Exception { isList.add(NettyInputStream.END_OF_INPUT_ERROR); } }); jerseyResponse.setEntityStream(new NettyInputStream(isList)); } else { jerseyResponse.setEntityStream(new InputStream() { @Override public int read() throws IOException { return -1; } }); } if (asyncConnectorCallback != null) { connector.executorService.execute(new Runnable() { @Override public void run() { asyncConnectorCallback.response(jerseyResponse); future.complete(jerseyResponse); } }); } } if (msg instanceof HttpContent) { HttpContent httpContent = (HttpContent) msg; ByteBuf content = httpContent.content(); if (content.isReadable()) { // copy bytes - when netty reads last chunk, it automatically closes the channel, which invalidates all // relates ByteBuffs. byte[] bytes = new byte[content.readableBytes()]; content.getBytes(content.readerIndex(), bytes); isList.add(new ByteArrayInputStream(bytes)); } if (msg instanceof LastHttpContent) { isList.add(NettyInputStream.END_OF_INPUT); } } }
From source file:org.glassfish.jersey.netty.connector.NettyConnector.java
License:Open Source License
@Override public Future<?> apply(final ClientRequest jerseyRequest, final AsyncConnectorCallback jerseyCallback) { final CompletableFuture<Object> settableFuture = new CompletableFuture<>(); final URI requestUri = jerseyRequest.getUri(); String host = requestUri.getHost(); int port = requestUri.getPort() != -1 ? requestUri.getPort() : "https".equals(requestUri.getScheme()) ? 443 : 80; try {/* w w w .j av a 2 s.c o m*/ Bootstrap b = new Bootstrap(); b.group(group).channel(NioSocketChannel.class).handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); // Enable HTTPS if necessary. if ("https".equals(requestUri.getScheme())) { // making client authentication optional for now; it could be extracted to configurable property JdkSslContext jdkSslContext = new JdkSslContext(client.getSslContext(), true, ClientAuth.NONE); p.addLast(jdkSslContext.newHandler(ch.alloc())); } // http proxy Configuration config = jerseyRequest.getConfiguration(); final Object proxyUri = config.getProperties().get(ClientProperties.PROXY_URI); if (proxyUri != null) { final URI u = getProxyUri(proxyUri); final String userName = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_USERNAME, String.class); final String password = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_PASSWORD, String.class); p.addLast(new HttpProxyHandler( new InetSocketAddress(u.getHost(), u.getPort() == -1 ? 8080 : u.getPort()), userName, password)); } p.addLast(new HttpClientCodec()); p.addLast(new ChunkedWriteHandler()); p.addLast(new HttpContentDecompressor()); p.addLast(new JerseyClientHandler(NettyConnector.this, jerseyRequest, jerseyCallback, settableFuture)); } }); // connect timeout Integer connectTimeout = ClientProperties.getValue(jerseyRequest.getConfiguration().getProperties(), ClientProperties.CONNECT_TIMEOUT, 0); if (connectTimeout > 0) { b.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, connectTimeout); } // Make the connection attempt. final Channel ch = b.connect(host, port).sync().channel(); // guard against prematurely closed channel final GenericFutureListener<io.netty.util.concurrent.Future<? super Void>> closeListener = new GenericFutureListener<io.netty.util.concurrent.Future<? super Void>>() { @Override public void operationComplete(io.netty.util.concurrent.Future<? super Void> future) throws Exception { if (!settableFuture.isDone()) { settableFuture.completeExceptionally(new IOException("Channel closed.")); } } }; ch.closeFuture().addListener(closeListener); HttpRequest nettyRequest; if (jerseyRequest.hasEntity()) { nettyRequest = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.valueOf(jerseyRequest.getMethod()), requestUri.getRawPath()); } else { nettyRequest = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.valueOf(jerseyRequest.getMethod()), requestUri.getRawPath()); } // headers for (final Map.Entry<String, List<String>> e : jerseyRequest.getStringHeaders().entrySet()) { nettyRequest.headers().add(e.getKey(), e.getValue()); } // host header - http 1.1 nettyRequest.headers().add(HttpHeaderNames.HOST, jerseyRequest.getUri().getHost()); if (jerseyRequest.hasEntity()) { if (jerseyRequest.getLengthLong() == -1) { HttpUtil.setTransferEncodingChunked(nettyRequest, true); } else { nettyRequest.headers().add(HttpHeaderNames.CONTENT_LENGTH, jerseyRequest.getLengthLong()); } } if (jerseyRequest.hasEntity()) { // Send the HTTP request. ch.writeAndFlush(nettyRequest); final JerseyChunkedInput jerseyChunkedInput = new JerseyChunkedInput(ch); jerseyRequest.setStreamProvider(new OutboundMessageContext.StreamProvider() { @Override public OutputStream getOutputStream(int contentLength) throws IOException { return jerseyChunkedInput; } }); if (HttpUtil.isTransferEncodingChunked(nettyRequest)) { ch.write(new HttpChunkedInput(jerseyChunkedInput)); } else { ch.write(jerseyChunkedInput); } executorService.execute(new Runnable() { @Override public void run() { // close listener is not needed any more. ch.closeFuture().removeListener(closeListener); try { jerseyRequest.writeEntity(); } catch (IOException e) { jerseyCallback.failure(e); settableFuture.completeExceptionally(e); } } }); ch.flush(); } else { // close listener is not needed any more. ch.closeFuture().removeListener(closeListener); // Send the HTTP request. ch.writeAndFlush(nettyRequest); } } catch (InterruptedException e) { settableFuture.completeExceptionally(e); return settableFuture; } return settableFuture; }
From source file:org.glassfish.jersey.netty.httpserver.JerseyHttp2ServerHandler.java
License:Open Source License
/** * Create Jersey {@link ContainerRequest} based on Netty {@link HttpRequest}. * * @param ctx Netty channel context. * @param http2Headers Netty Http/2 headers. * @return created Jersey Container Request. */// w w w . j a v a 2 s .com private ContainerRequest createContainerRequest(ChannelHandlerContext ctx, Http2HeadersFrame http2Headers) { String path = http2Headers.headers().path().toString(); String s = path.startsWith("/") ? path.substring(1) : path; URI requestUri = URI.create(baseUri + ContainerUtils.encodeUnsafeCharacters(s)); ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri, http2Headers.headers().method().toString(), getSecurityContext(), new PropertiesDelegate() { private final Map<String, Object> properties = new HashMap<>(); @Override public Object getProperty(String name) { return properties.get(name); } @Override public Collection<String> getPropertyNames() { return properties.keySet(); } @Override public void setProperty(String name, Object object) { properties.put(name, object); } @Override public void removeProperty(String name) { properties.remove(name); } }); // request entity handling. if (!http2Headers.isEndStream()) { ctx.channel().closeFuture().addListener(new GenericFutureListener<Future<? super Void>>() { @Override public void operationComplete(Future<? super Void> future) throws Exception { isList.add(NettyInputStream.END_OF_INPUT_ERROR); } }); requestContext.setEntityStream(new NettyInputStream(isList)); } else { requestContext.setEntityStream(new InputStream() { @Override public int read() throws IOException { return -1; } }); } // copying headers from netty request to jersey container request context. for (CharSequence name : http2Headers.headers().names()) { requestContext.headers(name.toString(), mapToString(http2Headers.headers().getAll(name))); } return requestContext; }
From source file:org.glassfish.jersey.netty.httpserver.JerseyServerHandler.java
License:Open Source License
/** * Create Jersey {@link ContainerRequest} based on Netty {@link HttpRequest}. * * @param ctx Netty channel context./* w w w . j a va 2 s . co m*/ * @param req Netty Http request. * @return created Jersey Container Request. */ private ContainerRequest createContainerRequest(ChannelHandlerContext ctx, HttpRequest req) { String s = req.uri().startsWith("/") ? req.uri().substring(1) : req.uri(); URI requestUri = URI.create(baseUri + ContainerUtils.encodeUnsafeCharacters(s)); ContainerRequest requestContext = new ContainerRequest(baseUri, requestUri, req.method().name(), getSecurityContext(), new PropertiesDelegate() { private final Map<String, Object> properties = new HashMap<>(); @Override public Object getProperty(String name) { return properties.get(name); } @Override public Collection<String> getPropertyNames() { return properties.keySet(); } @Override public void setProperty(String name, Object object) { properties.put(name, object); } @Override public void removeProperty(String name) { properties.remove(name); } }); // request entity handling. if ((req.headers().contains(HttpHeaderNames.CONTENT_LENGTH) && HttpUtil.getContentLength(req) > 0) || HttpUtil.isTransferEncodingChunked(req)) { ctx.channel().closeFuture().addListener(new GenericFutureListener<Future<? super Void>>() { @Override public void operationComplete(Future<? super Void> future) throws Exception { isList.add(NettyInputStream.END_OF_INPUT_ERROR); } }); requestContext.setEntityStream(new NettyInputStream(isList)); } else { requestContext.setEntityStream(new InputStream() { @Override public int read() throws IOException { return -1; } }); } // copying headers from netty request to jersey container request context. for (String name : req.headers().names()) { requestContext.headers(name, req.headers().getAll(name)); } return requestContext; }
From source file:org.glassfish.jersey.netty.httpserver.NettyHttpContainerProvider.java
License:Open Source License
/** * Create and start Netty server.// w ww . ja v a 2 s. co m * * @param baseUri base uri. * @param configuration Jersey configuration. * @param sslContext Netty SSL context (can be null). * @param block when {@code true}, this method will block until the server is stopped. When {@code false}, the * execution will * end immediately after the server is started. * @return Netty channel instance. * @throws ProcessingException when there is an issue with creating new container. */ public static Channel createServer(final URI baseUri, final ResourceConfig configuration, SslContext sslContext, final boolean block) throws ProcessingException { // Configure the server. final EventLoopGroup bossGroup = new NioEventLoopGroup(1); final EventLoopGroup workerGroup = new NioEventLoopGroup(); final NettyHttpContainer container = new NettyHttpContainer(configuration); try { ServerBootstrap b = new ServerBootstrap(); b.option(ChannelOption.SO_BACKLOG, 1024); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) .childHandler(new JerseyServerInitializer(baseUri, sslContext, container)); int port = getPort(baseUri); Channel ch = b.bind(port).sync().channel(); ch.closeFuture().addListener(new GenericFutureListener<Future<? super Void>>() { @Override public void operationComplete(Future<? super Void> future) throws Exception { container.getApplicationHandler().onShutdown(container); bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } }); if (block) { ch.closeFuture().sync(); return ch; } else { return ch; } } catch (InterruptedException e) { throw new ProcessingException(e); } }