X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-client%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fclient%2FNetconfClientSessionListener.java;h=21be3a8cabf4cf24edb6a9fc08530ebce76bcb53;hb=c7ec8db7f107b5e265f4e8b2fe3dd0f7b1163b64;hp=1ac2e7e26462c84a239757f93ee6b2d926f53e46;hpb=8ffb3e08bfa609405e883444480642b93c83242a;p=controller.git diff --git a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSessionListener.java b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSessionListener.java index 1ac2e7e264..21be3a8cab 100644 --- a/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSessionListener.java +++ b/opendaylight/netconf/netconf-client/src/main/java/org/opendaylight/controller/netconf/client/NetconfClientSessionListener.java @@ -1,115 +1,14 @@ /* - * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.controller.netconf.client; -import io.netty.util.concurrent.Future; -import io.netty.util.concurrent.GlobalEventExecutor; -import io.netty.util.concurrent.Promise; - -import java.util.ArrayDeque; -import java.util.Queue; - -import javax.annotation.concurrent.GuardedBy; - -import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.api.NetconfSessionListener; -import org.opendaylight.controller.netconf.api.NetconfTerminationReason; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.Preconditions; - -public class NetconfClientSessionListener implements NetconfSessionListener { - private static final class RequestEntry { - final Promise promise; - final NetconfMessage request; - - public RequestEntry(Promise future, NetconfMessage request) { - this.promise = Preconditions.checkNotNull(future); - this.request = Preconditions.checkNotNull(request); - } - } - - private static final Logger logger = LoggerFactory.getLogger(NetconfClientSessionListener.class); - - @GuardedBy("this") - private final Queue requests = new ArrayDeque<>(); - - @GuardedBy("this") - private NetconfClientSession clientSession; - - @GuardedBy("this") - private void dispatchRequest() { - while (!requests.isEmpty()) { - final RequestEntry e = requests.peek(); - if (e.promise.setUncancellable()) { - logger.debug("Sending message {}", e.request); - clientSession.sendMessage(e.request); - break; - } - - logger.debug("Message {} has been cancelled, skipping it", e.request); - requests.poll(); - } - } - - @Override - public final synchronized void onSessionUp(NetconfClientSession clientSession) { - this.clientSession = Preconditions.checkNotNull(clientSession); - logger.debug("Client session {} went up", clientSession); - dispatchRequest(); - } - - private synchronized void tearDown(final Exception cause) { - final RequestEntry e = requests.poll(); - if (e != null) { - e.promise.setFailure(cause); - } - - this.clientSession = null; - } - - @Override - public final void onSessionDown(NetconfClientSession clientSession, Exception e) { - logger.debug("Client Session {} went down unexpectedly", clientSession, e); - tearDown(e); - } - - @Override - public final void onSessionTerminated(NetconfClientSession clientSession, - NetconfTerminationReason netconfTerminationReason) { - logger.debug("Client Session {} terminated, reason: {}", clientSession, - netconfTerminationReason.getErrorMessage()); - tearDown(new RuntimeException(netconfTerminationReason.getErrorMessage())); - } - - @Override - public synchronized void onMessage(NetconfClientSession session, NetconfMessage message) { - logger.debug("New message arrived: {}", message); - - final RequestEntry e = requests.poll(); - if (e != null) { - e.promise.setSuccess(message); - dispatchRequest(); - } else { - logger.info("Ignoring unsolicited message {}", message); - } - } - - final synchronized Future sendRequest(NetconfMessage message) { - final RequestEntry req = new RequestEntry(GlobalEventExecutor.INSTANCE.newPromise(), message); - requests.add(req); - if (clientSession != null) { - dispatchRequest(); - } +public interface NetconfClientSessionListener extends NetconfSessionListener { - return req.promise; - } }