I am using func xmppStream(_ sender: XMPPStream, didReceive presence: XMPPPresence)
for managing online offline status.This function is working fine for one to one user but it will not working properly on multiple user.
for example I have 3 user A, B and C now the scenario is Online offline status is working fine for A to B and B to A as func xmppStream(_ sender: XMPPStream, didReceive presence: XMPPPresence)
function is calling very well. but If C user check status of A or B then func xmppStream(_ sender: XMPPStream, didReceive presence: XMPPPresence)
is not being called.
I won't be able to understand what is the issue. Here is my Code:
func xmppStream(_ sender: XMPPStream, didReceive presence: XMPPPresence) {
let presenceType = presence.type
let myUsername = sender.myJID?.user
print("myusername \(myUsername)")
if let usr = presence.from?.user {
print("didReceive :- \(presenceType)")
print("didReceive usr :- \(usr)")
if usr != myUsername {
if presenceType == "available" {
let dict: NSDictionary = ["presenceType":"1",
"user_id":usr]
if !APP_DELEGATE.arrPresentUser.contains(dict) {
APP_DELEGATE.arrPresentUser.add(dict)
}
} else {
let pred : NSPredicate = NSPredicate(format: "user_id = %@", usr)
let approvalRequestArray = APP_DELEGATE.arrPresentUser.filtered(using: pred) as NSArray
if approvalRequestArray.count > 0 {
let dict = approvalRequestArray.object(at: 0) as! NSDictionary
APP_DELEGATE.arrPresentUser.remove(dict)
}
}
NotificationCenter.default.post(name: Notification.Name("ReceivedUserStatus"), object: nil)
}
}
}
Note: I had tried to use @objc also.(@objc func xmppStream(_ sender: XMPPStream, didReceive presence: XMPPPresence)
)
I have solved my problem by adding following code
let userReceiverJID = XMPPJID(string: "\(receiverJID)@\(CHATHOST)")
APP_DELEGATE.xmppRoster.acceptPresenceSubscriptionRequest(from: userReceiverJID!, andAddToRoster: true)
APP_DELEGATE.xmppRoster.subscribePresence(toUser: userReceiverJID!)