/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.connection.api; import java.util.concurrent.TimeoutException; import de.rcenvironment.core.communication.common.CommunicationException; import de.rcenvironment.core.communication.transport.spi.MessageChannel; /** * Represents a connection setup, ie a configured network destination that a logical message channel can be established to. * * @author Robert Mischke */ public interface ConnectionSetup { /** * @return the current {@link ConnectionSetupState} of the connection */ ConnectionSetupState getState(); /** * @return the reason for the last disconnect; only non-null in the DISCONNECTING and DISCONNECTED {@link ConnectionSetupState}s. */ DisconnectReason getDisconnectReason(); /** * Initiates an synchronous connection attempt. * * @throws CommunicationException on connection errors */ void connectSync() throws CommunicationException; /** * Signals that an active connection is desired; may trigger an asynchronous connection attempt. */ void signalStartIntent(); /** * Signals that an active connection is not desired (anymore); may trigger an asynchronous disconnect. */ void signalStopIntent(); /** * Utility method for integration tests that waits until the connection has reached the given state, or the timeout has elapsed. * * @param targetState the state to wait for * @param timeoutMsec the maximum time to wait * @throws TimeoutException if the wait time is exceeded * @throws InterruptedException on thread interruption */ void awaitState(ConnectionSetupState targetState, int timeoutMsec) throws TimeoutException, InterruptedException; /** * @return the display name specified on creation */ String getDisplayName(); /** * @return the numeric, JVM-unique id of this setup; for use by console commands, for example */ long getId(); /** * @return true if this connection should automatically try to connect on instance startup */ boolean getConnnectOnStartup(); /** * @return the string definition of the {@link NetworkContactPoint} to connect to */ String getNetworkContactPointString(); /** * @return the currently associated {@link MessageChannel}; only non-null in CONNECTED and DISCONNECTED {@link ConnectionSetupState}s */ MessageChannel getCurrentChannel(); /** * @return the id of the currently associated {@link MessageChannel}; only non-null when CONNECTED */ String getCurrentChannelId(); /** * @return the id of the last associated {@link MessageChannel}; may be null */ String getLastChannelId(); }