/******************************************************************************* * Copyright (c) 2011, 2016 Eurotech and/or its affiliates * * 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 * * Contributors: * Eurotech *******************************************************************************/ package org.eclipse.kura.data; import org.eclipse.kura.KuraConnectException; import org.eclipse.kura.KuraException; import org.eclipse.kura.KuraNotConnectedException; import org.eclipse.kura.KuraTimeoutException; import org.eclipse.kura.KuraTooManyInflightMessagesException; import org.eclipse.kura.data.transport.listener.DataTransportListener; /** * DataTransportService implementations provide the ability of connecting to a * remote broker, publish messages, subscribe to topics, receive messages on the * subscribed topics, and disconnect from the remote message broker. * * The <a href="http://www.osgi.org/wiki/uploads/Links/whiteboard.pdf">whiteboard pattern</a> * is used to notify the service users about events such as message arrived, connection lost etc. * through the {@link DataTransportListener} */ public interface DataTransportService { /** * Connects to the remote broker. This method will block until the * connection is established or a timeout occurs. The actual configuration * needed to establish a connection is protocol specific (e.g. MQTT) and is * exposed through the ConfigurationAdmin. * * @throws KuraConnectException * the caller MAY retry connecting a later time. */ public void connect() throws KuraConnectException; /** * Returns true if the DataTransportService is currently connected to the remote server. */ public boolean isConnected(); public String getBrokerUrl(); /** * Returns the account name associated with the DataTransportService */ public String getAccountName(); public String getUsername(); public String getClientId(); /** * Disconnects from the broker. This method will block, up to the specified * duration, allowing the protocol implementation to complete delivery of * in-flight messages before actually disconnecting from the broker. * * @param quiesceTimeout * - timeout that will be used before forcing a disconnect */ public void disconnect(long quiesceTimeout); /** * Subscribes to a topic on the broker. This method MAY block until the * underlying protocol message (e.g. the MQTT SUBSCRIBE message) is * acknowledged by the broker or a timeout occurs. This message is * idempotent so the caller may safely retry subscribing. The timeout * interval used by the service is configurable through the * ConfigurationService. * * @param topic * @param qos * @throws KuraTimeoutException * TODO * @throws KuraException * @throws KuraNotConnectedException * TODO */ public void subscribe(String topic, int qos) throws KuraTimeoutException, KuraException, KuraNotConnectedException; /** * Unsubscribes to a topic on the broker. This method MAY block until the * underlying protocol message (e.g. the MQTT UNSUBSCRIBE message) is * acknowledged by the broker or a timeout occurs. The timeout * interval used by the service is configurable through the * ConfigurationService. * * @param topic * @throws KuraTimeoutException * @throws KuraException * @throws KuraNotConnectedException * TODO */ public void unsubscribe(String topic) throws KuraTimeoutException, KuraException, KuraNotConnectedException; /** * Enqueues a message for publishing with the underlying transport implementation. * An active connection to the remote server is required. * * @param topic * @param payload * @param qos * @param retain * @return * @throws KuraTooManyInflightMessagesException * @throws KuraException * @throws KuraNotConnectedException * TODO */ public DataTransportToken publish(String topic, byte[] payload, int qos, boolean retain) throws KuraTooManyInflightMessagesException, KuraException, KuraNotConnectedException; /** * Adds a listener. * * @param listener * * @since {@link org.eclipse.kura.data} 1.1.0 */ public void addDataTransportListener(DataTransportListener listener); /** * Removes a listener. * * @param listener * * @since {@link org.eclipse.kura.data} 1.1.0 */ public void removeDataTransportListener(DataTransportListener listener); }