標籤:ios xmpp xmpp ios
#import "XMPPData.h"#import "XMPPFramework.h"//匯入花名冊相關標頭檔#import "XMPPRoster.h"#import "XMPPRosterMemoryStorage.h"#import "XMPPRosterCoreDataStorage.h"@interface XMPPData()<XMPPStreamDelegate,XMPPRosterDelegate>@property(strong,nonatomic) XMPPStream *xmppStream;@property(assign,nonatomic) BOOL isRegister;@property(strong,nonatomic) NSString*user,*pwd,*hostName,*domain;@property(assign,nonatomic) UInt16 port;@property(strong,nonatomic) XMPPRosterCoreDataStorage * rosterStorage;//花名冊儲存@property(strong,nonatomic) XMPPRoster * rosterModule;//花名冊模組@end@implementation XMPPData//開始串連聊天伺服器-(BOOL) connectWithUserName:(NSString*) username andPwd:(NSString*) pwd andHostName:(NSString*) hostname andDomain:(NSString*) domain andHostPort:(UInt16) port andIsRegister:(BOOL) isRegister{ self.hostName = hostname; self.port = port; self.domain = domain; self.user = username; self.pwd = pwd; self.isRegister = isRegister; self.xmppStream = [[XMPPStream alloc] init]; //設定代理 [self.xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(0, 0)]; //設定聊天伺服器位址 self.xmppStream .hostName = hostname; //設定聊天伺服器連接埠 預設是5222 self.xmppStream.hostPort = port; //設定Jid 就是使用者名稱 XMPPJID *jid = [XMPPJID jidWithUser:username domain:domain resource:@"test"]; self.xmppStream.myJID = jid; NSError * error = nil; //驗證串連 [self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:&error]; if (error) { NSLog(@"串連失敗:%@",error); return NO; } else { //註冊所有的模組 [self activeModules]; return YES; }}//啟用相關的模組-(void) activeModules{ //1.花名冊儲存物件 self.rosterStorage = [XMPPRosterCoreDataStorage sharedInstance]; //2.花名冊模組 self.rosterModule = [[XMPPRoster alloc] initWithRosterStorage:self.rosterStorage]; //3.啟用此模組 [self.rosterModule activate:self.xmppStream]; //4.添加roster代理 [self.rosterModule addDelegate:self delegateQueue:dispatch_get_main_queue()]; }//添加好友-(BOOL) addFriend:(NSString*) friendName{ XMPPJID * friendJid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",friendName,self.domain]]; [self.rosterModule subscribePresenceToUser:friendJid]; return YES;}//移除朋友-(BOOL) deleteFriend:(NSString*) friendName{ XMPPJID * friendJid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",friendName,self.domain]]; [self.rosterModule removeUser:friendJid]; return YES;}//收到好友請求 代理函數-(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence{ XMPPJID * fromJid = presence.from; //直接通過 [self.rosterModule acceptPresenceSubscriptionRequestFrom:fromJid andAddToRoster:YES];}-(void)xmppRoster:(XMPPRoster *)sender didReceiveRosterItem:(DDXMLElement *)item{ NSString *subscription = [item attributeStringValueForName:@"subscription"]; NSLog(@"%@",subscription); if ([subscription isEqualToString:@"both"]) { NSLog(@"雙方成為好友!"); }} //串連成功的代理函數-(void)xmppStreamDidConnect:(XMPPStream *)sender{ NSLog(@"串連成功"); if (self.isRegister) { NSError* error = nil; [sender registerWithPassword:self.pwd error:&error]; if (error) { NSLog(@"註冊失敗1,%@",error); } } else { NSError *error = nil; [sender authenticateWithPassword:self.pwd error:&error]; if (error) { NSLog(@"驗證失敗1,%@",error); } }}//串連失敗代理函數-(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{ NSLog(@"串連失敗,%@",error);}//驗證成功代理函數-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{ NSLog(@"驗證成功"); //4.登陸成功後 線上 [self.xmppStream sendElement:[XMPPPresence presence]];//使用者線上}
xmpp-iOS-添加好友和移除朋友