// // MQTTPersistence.h // MQTTClient // // Created by Christoph Krey on 22.03.15. // Copyright © 2015-2016 Christoph Krey. All rights reserved. // #import #import "MQTTMessage.h" static BOOL const MQTT_PERSISTENT = NO; static NSInteger const MQTT_MAX_SIZE = 64 * 1024 * 1024; static NSInteger const MQTT_MAX_WINDOW_SIZE = 16; static NSInteger const MQTT_MAX_MESSAGES = 1024; /** MQTTFlow is an abstraction of the entity to be stored for persistence */ @protocol MQTTFlow /** The clientID of the flow element */ @property (strong, nonatomic) NSString *clientId; /** The flag indicating incoming or outgoing flow element */ @property (strong, nonatomic) NSNumber *incomingFlag; /** The flag indicating if the flow element is retained*/ @property (strong, nonatomic) NSNumber *retainedFlag; /** The MQTTCommandType of the flow element, might be MQTT_None for offline queueing */ @property (strong, nonatomic) NSNumber *commandType; /** The MQTTQosLevel of the flow element */ @property (strong, nonatomic) NSNumber *qosLevel; /** The messageId of the flow element */ @property (strong, nonatomic) NSNumber *messageId; /** The topic of the flow element */ @property (strong, nonatomic) NSString *topic; /** The data of the flow element */ @property (strong, nonatomic) NSData *data; /** The deadline of the flow elelment before (re)trying transmission */ @property (strong, nonatomic) NSDate *deadline; @end /** The MQTTPersistence protocol is an abstraction of persistence classes for MQTTSession */ @protocol MQTTPersistence /** The maximum Window Size for outgoing inflight messages per clientID. Defaults to 16 */ @property (nonatomic) NSUInteger maxWindowSize; /** The maximum number of messages kept per clientID and direction. Defaults to 1024 */ @property (nonatomic) NSUInteger maxMessages; /** Indicates if the persistence implementation should make the information permannent. Defaults to NO */ @property (nonatomic) BOOL persistent; /** The maximum size of the storage used for persistence in total in bytes. Defaults to 1024*1024 bytes */ @property (nonatomic) NSUInteger maxSize; /** The current Window Size for outgoing inflight messages per clientID. * @param clientId * @return the current size of the outgoing inflight window */ - (NSUInteger)windowSize:(NSString *)clientId; /** Stores one new message * @param clientId * @param topic * @param data * @param retainFlag * @param qos * @param msgId * @param incomingFlag * @param commandType * @param deadline * @return the created MQTTFlow element or nil if the maxWindowSize has been exceeded */ - (id)storeMessageForClientId:(NSString *)clientId topic:(NSString *)topic data:(NSData *)data retainFlag:(BOOL)retainFlag qos:(MQTTQosLevel)qos msgId:(UInt16)msgId incomingFlag:(BOOL)incomingFlag commandType:(UInt8)commandType deadline:(NSDate *)deadline; /** Deletes an MQTTFlow element * @param flow */ - (void)deleteFlow:(id)flow; /** Deletes all MQTTFlow elements of a clientId * @param clientId */ - (void)deleteAllFlowsForClientId:(NSString *)clientId; /** Retrieves all MQTTFlow elements of a clientId and direction * @param clientId * @param incomingFlag * @return an NSArray of the retrieved MQTTFlow elements */ - (NSArray *)allFlowsforClientId:(NSString *)clientId incomingFlag:(BOOL)incomingFlag; /** Retrieves an MQTTFlow element * @param clientId * @param incomingFlag * @param messageId * @return the retrieved MQTTFlow element or nil if the elememt was not found */ - (id)flowforClientId:(NSString *)clientId incomingFlag:(BOOL)incomingFlag messageId:(UInt16)messageId; /** sync is called to allow the MQTTPersistence implemetation to save data permanently */ - (void)sync; @end