103 lines
3.1 KiB
Objective-C
103 lines
3.1 KiB
Objective-C
#import <Foundation/Foundation.h>
|
|
#import "XMPPModule.h"
|
|
#import "XMPPPing.h"
|
|
|
|
#define _XMPP_AUTO_PING_H
|
|
|
|
@class XMPPJID;
|
|
|
|
|
|
/**
|
|
* The XMPPAutoPing module sends pings on a designated interval to the target.
|
|
* The target may simply be the server, or a specific resource.
|
|
*
|
|
* The module only sends pings as needed.
|
|
* If the xmpp stream is receiving data from the target, there's no need to send a ping.
|
|
* Only when no data has been received from the target is a ping sent.
|
|
**/
|
|
@interface XMPPAutoPing : XMPPModule {
|
|
@private
|
|
NSTimeInterval pingInterval;
|
|
NSTimeInterval pingTimeout;
|
|
XMPPJID *targetJID;
|
|
NSString *targetJIDStr;
|
|
|
|
NSTimeInterval lastReceiveTime;
|
|
dispatch_source_t pingIntervalTimer;
|
|
|
|
BOOL awaitingPingResponse;
|
|
XMPPPing *xmppPing;
|
|
}
|
|
|
|
/**
|
|
* How often to send a ping.
|
|
*
|
|
* The internal timer fires every (pingInterval / 4) seconds.
|
|
* Upon firing it checks when data was last received from the target,
|
|
* and sends a ping if the elapsed time has exceeded the pingInterval.
|
|
* Thus the effective resolution of the timer is based on the configured interval.
|
|
*
|
|
* To temporarily disable auto-ping, set the interval to zero.
|
|
*
|
|
* The default pingInterval is 60 seconds.
|
|
**/
|
|
@property (readwrite) NSTimeInterval pingInterval;
|
|
|
|
/**
|
|
* How long to wait after sending a ping before timing out.
|
|
*
|
|
* The timeout is decoupled from the pingInterval to allow for longer pingIntervals,
|
|
* which avoids flooding the network, and to allow more precise control overall.
|
|
*
|
|
* After a ping is sent, if a reply is not received by this timeout,
|
|
* the delegate method is invoked.
|
|
*
|
|
* The default pingTimeout is 10 seconds.
|
|
**/
|
|
@property (readwrite) NSTimeInterval pingTimeout;
|
|
|
|
/**
|
|
* The target to send pings to.
|
|
*
|
|
* If the targetJID is nil, this implies the target is the xmpp server we're connected to.
|
|
* In this case, receiving any data means we've received data from the target.
|
|
*
|
|
* If the targetJID is non-nil, it must be a full JID (user@domain.tld/rsrc).
|
|
* In this case, the module will monitor the stream for data from the given JID.
|
|
*
|
|
* The default targetJID is nil.
|
|
**/
|
|
@property (readwrite, strong) XMPPJID *targetJID;
|
|
|
|
/**
|
|
* Corresponds to the last time data was received from the target.
|
|
* The NSTimeInterval value comes from [NSDate timeIntervalSinceReferenceDate]
|
|
**/
|
|
@property (readonly) NSTimeInterval lastReceiveTime;
|
|
|
|
/**
|
|
* XMPPAutoPing is used to automatically send pings on a regular interval.
|
|
* Sometimes the target is also sending pings to us as well.
|
|
* If so, you may optionally set respondsToQueries to YES to allow the module to respond to incoming pings.
|
|
*
|
|
* If you create multiple instances of XMPPAutoPing or XMPPPing,
|
|
* then only one instance should respond to queries.
|
|
*
|
|
* The default value is NO.
|
|
**/
|
|
@property (readwrite) BOOL respondsToQueries;
|
|
|
|
@end
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
@protocol XMPPAutoPingDelegate
|
|
@optional
|
|
|
|
- (void)xmppAutoPingDidSendPing:(XMPPAutoPing *)sender;
|
|
- (void)xmppAutoPingDidReceivePong:(XMPPAutoPing *)sender;
|
|
|
|
- (void)xmppAutoPingDidTimeout:(XMPPAutoPing *)sender;
|
|
|
|
@end
|