/***********************************************************************************
*
* Copyright (c) 2014 Kamil Baczkowicz
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* The Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
*
* Kamil Baczkowicz - initial API and implementation and/or initial documentation
*
*/
package pl.baczkowicz.mqttspy.connectivity;
import pl.baczkowicz.spy.connectivity.IConnection;
/**
* Basic interface for interacting with an MQTT connection.
*
* TODO: might need adding more methods from BaseMqttConnection
*/
public interface IMqttConnection extends IConnection
{
BaseMqttSubscription getMqttSubscriptionForTopic(final String topic);
void addSubscription(final BaseMqttSubscription subscription);
void removeSubscription(final BaseMqttSubscription subscription);
/**
* Attempts a subscription to the given topic and quality of service.
*
* @param topic Subscription topic
* @param qos Subscription QoS
*/
boolean subscribe(final String topic, final int qos);
boolean subscribe(final BaseMqttSubscription subscription);
/**
* Attempts to unsubscribe from the given topic.
*
* @param topic Subscription topic
*/
boolean unsubscribe(final String topic);
/**
* Checks if a message can be published (e.g. client is connected).
*
* @return True if publication is possible
*/
boolean canPublish();
/**
* Publishes a message with the given parameters.
*
* @param publicationTopic Publication topic
* @param payload Payload
* @param qos Quality of Service
* @param retained Retained flag
*
* @return True if publication was successful
*/
boolean publish(final String publicationTopic, final String payload, final int qos, final boolean retained);
/**
* Publishes a message with the given parameters.
*
* @param publicationTopic Publication topic
* @param payload Payload
* @param qos Quality of Service
* @param retained Retained flag
*
* @return True if publication was successful
*/
boolean publish(final String publicationTopic, final byte[] payload, final int qos, final boolean retained);
}