/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.transport.spi; import de.rcenvironment.core.communication.channel.MessageChannelService; import de.rcenvironment.core.communication.channel.ServerContactPoint; import de.rcenvironment.core.communication.common.CommunicationException; import de.rcenvironment.core.communication.model.NetworkContactPoint; import de.rcenvironment.core.communication.model.InitialNodeInformation; /** * Interface for pluggable transport providers. * * TODO extend documentation * * @author Robert Mischke */ public interface NetworkTransportProvider { /** * @return the unique transport id of this implementation; may be used to identify the OSGi bundle providing its implementation, so * naming conventions should be observed */ String getTransportId(); /** * Connects to a remote node. This is a blocking call; all implementations must be thread-safe. After this call returns, it is expected * that the created {@link MessageChannel} contains the {@link InitialNodeInformation} of the remote node. This is usually achieved by * performing a transport-native handshake where the remote node delegates to an implementation of * {@link MessageChannelEndpointHandler#exchangeNodeInformation(InitialNodeInformation)}. * * @param ncp the contact information for the remote server * @param ownNodeInformation the network-level information of the local node * @param ownProtocolVersion the protocol version of the local node * @param allowInverseConnection whether to allow the remote node to use the same physical link to initiate network messages to the * local node * @param connectionEndpointHandler the {@link MessageChannelEndpointHandler} to use for remote-initiated connections from the * perspective of the connection target; may be null if <code>allowInverseConnections</code> is false * @param brokenConnectionListener listener for unexpected connection failure * @return the initialized {@link MessageChannel} * @throws CommunicationException on connection or protocol failures */ // TODO boolean parameter is redundant; remove -- misc_ro MessageChannel connect(NetworkContactPoint ncp, InitialNodeInformation ownNodeInformation, String ownProtocolVersion, boolean allowInverseConnection, MessageChannelEndpointHandler connectionEndpointHandler, BrokenMessageChannelListener brokenConnectionListener) throws CommunicationException; /** * @return whether this transport supports remote-initiated connections, i.e. logical message links that can initiate messages over a * physical connection that was initiated by the remote node */ boolean supportsRemoteInitiatedConnections(); /** * Starts a server matching this transport. This is a blocking call. See {@link MessageChannelService#startServer(NetworkContactPoint)} * for more information. * * @param scp the {@link ServerContactPoint} to start and get configuration information from * @throws CommunicationException on startup errors */ void startServer(ServerContactPoint scp) throws CommunicationException; /** * Stops a server matching this transport. This is a blocking call. See {@link MessageChannelService#stopServer(NetworkContactPoint)} * for more information. * * @param scp the {@link ServerContactPoint} to stop and get configuration information from */ void stopServer(ServerContactPoint scp); }