PNXMPPFramework/Extensions/XEP-0012/XMPPLastActivity.h
2016-02-24 16:56:39 +01:00

120 lines
4.4 KiB
Objective-C

//
// XMPPLastActivity.h
// XEP-0012
//
// Created by Daniel Rodríguez Troitiño on 1/26/2013.
//
//
#import "XMPP.h"
#import "XMPPIQ+LastActivity.h"
#define _XMPP_LAST_ACTIVITY_H
/**
* Provides support to both sending last activity queries and answering those
* last activity queries done by other entities, as documented in the XEP-0012.
*
* The automatic responses can be disabled setting respondsToQueries to NO.
*
* If no delegate of this class responds to
* numberOfIdleTimeSecondsForXMPPLastActivity:currentIdleTimeSeconds: a default
* value of 0 will be send to the other entities. You are encouraged to provide
* at least one delegate with this method implemented.
*/
@interface XMPPLastActivity : XMPPModule
/**
* Whether or not the module should respond to incoming last activity queries.
*
* If you create multiple instances of this module, only one instance should
* respond to queries.
*
* It is recommended you set this (if needed) before you activate the module.
*
* The default value is YES.
*/
@property (atomic, assign) BOOL respondsToQueries;
/**
* Send a last activity query to an specific JID.
*
* XEP-0012 specifies that last activity queries can be send to offline
* entities (bare JID), to online resources (full JID) or servers (domain only
* JID). The answers of each of those kind of JIDs are a little different and
* has different meaning. It is responsability of the consumer to interpretate
* those answers.
*
* The module will wait for an answer from the server or the entity for at most
* 30 seconds before considering this request a timeout failure.
*
* The delegates of the module should implement
* xmppLastActivity:didReceiveResponse: and
* xmppLastActivity:didNotReceiveResponse:dueToTimeout: to be informed when the
* result of the IQ arrives (or the timeout happens).
*
* The returning string is the element ID of the IQ that was sent including the
* last activity query.
*/
- (NSString *)sendLastActivityQueryToJID:(XMPPJID *)jid;
/**
* Send a last activity query to an specific JID with an specific timeout.
*
* XEP-0012 specifies that last activity queries can be send to offline
* entities (bare JID), to online resources (full JID) or servers (domain only
* JID). The answers of each of those kind of JIDs are a little different and
* has different meaning. It is responsability of the consumer to interpretate
* those answers.
*
* The module will wait for an answer from the server or the entity for at most
* the number seconds given by tiemout before considering this request a timeout
* failure.
*
* The delegates of the module should implement
* xmppLastActivity:didReceiveResponse: and
* xmppLastActivity:didNotReceiveResponse:dueToTimeout: to be informed when the
* result of the IQ arrives (or the timeout happens).
*
* The returning string is the element ID of the IQ that was sent including the
* last activity query.
*/
- (NSString *)sendLastActivityQueryToJID:(XMPPJID *)jid withTimeout:(NSTimeInterval)timeout;
@end
@protocol XMPPLastActivityDelegate <NSObject>
/**
* Callback when the XMPPLastActivity sender receives a result IQ or an error IQ
* for a previous get IQ.
*
* The XMPPIQ response can be queried using the methods in the category
* XMPPIQ (LastActivity) for the seconds and status value.
*/
- (void)xmppLastActivity:(XMPPLastActivity *)sender didReceiveResponse:(XMPPIQ *)response;
/**
* Callback when the XMPPLastActivity sender does not receive neither a result
* IQ nor a error IQ after timeout seconds have passed.
*
* The queryID is the element ID used to send the query, so the consumer can
* compare it with the element ID returned by the sendLastActivityQueryToJID:
* methods and act accordingly.
*/
- (void)xmppLastActivity:(XMPPLastActivity *)sender didNotReceiveResponse:(NSString *)queryID dueToTimeout:(NSTimeInterval)timeout;
/**
* Callback to obtain the number of idle seconds that the XMPPLastActivity
* sender should use as answer to a last activity query iq.
*
* Each delegate will be asked in turn (the order is not guaranteed) and each of
* then should decide to return the given idleSeconds value, or a new value as
* the number of idleSeconds. The first delegate will receive NSNotFound as the
* value of idleSecond. If the last delegate returns NSNotFound as result, the
* answer will be 0 seconds.
*/
- (NSUInteger)numberOfIdleTimeSecondsForXMPPLastActivity:(XMPPLastActivity *)sender queryIQ:(XMPPIQ *)iq currentIdleTimeSeconds:(NSUInteger)idleSeconds;
@end