import io.netty.util.concurrent.Promise;
import java.net.SocketAddress;
import org.opendaylight.netconf.nettyutil.AbstractChannelInitializer;
-import org.opendaylight.protocol.framework.SessionListenerFactory;
class TcpClientChannelInitializer extends AbstractChannelInitializer<NetconfClientSession> {
GenericFutureListener<Future<NetconfClientSession>> negotiationFutureListener;
@Override
- public void connect(final ChannelHandlerContext ctx, final SocketAddress remoteAddress, final SocketAddress localAddress,
+ public void connect(final ChannelHandlerContext ctx, final SocketAddress remoteAddress,
+ final SocketAddress localAddress,
final ChannelPromise channelPromise) throws Exception {
connectPromise = channelPromise;
ChannelPromise tcpConnectFuture = new DefaultChannelPromise(ch);
- negotiationFutureListener = new GenericFutureListener<Future<NetconfClientSession>>() {
- @Override
- public void operationComplete(final Future<NetconfClientSession> future) throws Exception {
- if (future.isSuccess()) {
- connectPromise.setSuccess();
- }
+ negotiationFutureListener = future -> {
+ if (future.isSuccess()) {
+ channelPromise.setSuccess();
}
};
- tcpConnectFuture.addListener(new GenericFutureListener<Future<? super Void>>() {
- @Override
- public void operationComplete(final Future<? super Void> future) throws Exception {
- if(future.isSuccess()) {
- //complete connection promise with netconf negotiation future
- negotiationFuture.addListener(negotiationFutureListener);
- } else {
- connectPromise.setFailure(future.cause());
- }
+ tcpConnectFuture.addListener(future -> {
+ if (future.isSuccess()) {
+ //complete connection promise with netconf negotiation future
+ negotiationFuture.addListener(negotiationFutureListener);
+ } else {
+ channelPromise.setFailure(future.cause());
}
});
ctx.connect(remoteAddress, localAddress, tcpConnectFuture);
@Override
public void disconnect(final ChannelHandlerContext ctx, final ChannelPromise promise) throws Exception {
- // If we have already succeeded and the session was dropped after, we need to fire inactive to notify reconnect logic
- if(connectPromise.isSuccess()) {
+ if (connectPromise == null) {
+ return;
+ }
+
+ // If we have already succeeded and the session was dropped after, we need to fire inactive to notify
+ // reconnect logic
+ if (connectPromise.isSuccess()) {
ctx.fireChannelInactive();
}
//If connection promise is not already set, it means negotiation failed
//we must set connection promise to failure
- if(!connectPromise.isDone()) {
+ if (!connectPromise.isDone()) {
connectPromise.setFailure(new IllegalStateException("Negotiation failed"));
}
@Override
protected void initializeSessionNegotiator(final Channel ch, final Promise<NetconfClientSession> promise) {
ch.pipeline().addAfter(NETCONF_MESSAGE_DECODER, AbstractChannelInitializer.NETCONF_SESSION_NEGOTIATOR,
- negotiatorFactory.getSessionNegotiator(new SessionListenerFactory<NetconfClientSessionListener>() {
- @Override
- public NetconfClientSessionListener getSessionListener() {
- return sessionListener;
- }
- }, ch, promise));
+ negotiatorFactory.getSessionNegotiator(() -> sessionListener, ch, promise));
}
}