XMPP通讯工程1.创建管理器
1.创建管理器
1 #import <Foundation/Foundation.h> 2 #import "XMPPFramework.h" 3 @interface XMPPManager : NSObject 4 //通信管理 5 @property (nonatomic,strong)XMPPStream *xmppStream; 6 //消息管理 7 @property (nonatomic,strong) XMPPMessageArchivingCoreDataStorage *messageStorage; 8 //好友列表 9 @property (nonatomic,strong) XMPPRoster *xmppRoster; 10 //单例方法 11 +(instancetype)defaultManager; 12 13 //登录 14 -(void)loginWithUserName:(NSString *)name Password:(NSString *)password; 15 //注册 16 -(void)registerWithUserName:(NSString *)name Password:(NSString *)password; 17 @end
1 #import "XMPPManager.h" 2 typedef NS_ENUM(NSInteger) { 3 ConnectToLogin, 4 ConnectTORegister, 5 6 }ConnectServerPurpose; 7 @interface XMPPManager ()<XMPPStreamDelegate> 8 //保存连接服务器目的 9 @property (nonatomic,assign) ConnectServerPurpose connectPurpose; 10 //登录密码 11 @property (nonatomic,strong) NSString *loginPassword; 12 //注册密码 13 @property (nonatomic,strong) NSString *registPassword; 14 15 @end 16 @implementation XMPPManager 17 +(instancetype)defaultManager 18 { 19 static XMPPManager *manager = nil; 20 static dispatch_once_t onceToken; 21 dispatch_once(&onceToken, ^{ 22 manager = [[XMPPManager alloc] init]; 23 }); 24 return manager; 25 } 26 27 //初始化方法 28 -(instancetype)init 29 { 30 self = [super init]; 31 if (self) { 32 //创建并初始化XMPPStream 33 self.xmppStream = [[XMPPStream alloc] init]; 34 //添加主机名和端口号 35 self.xmppStream.hostName = kHostName; 36 self.xmppStream.hostPort = kHostPort; 37 //加入代理队列 38 [self.xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()]; 39 //创建消息管理 40 self.messageStorage = [XMPPMessageArchivingCoreDataStorage sharedInstance]; 41 //消息归档 42 XMPPMessageArchiving *messageArchiving = [[XMPPMessageArchiving alloc] initWithMessageArchivingStorage:self.messageStorage dispatchQueue:dispatch_get_main_queue()]; 43 //加入通道 44 [messageArchiving activate:self.xmppStream]; 45 46 //好友存储 47 XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance]; 48 //好友管理 49 self.xmppRoster = [[XMPPRoster alloc] initWithRosterStorage:rosterStorage dispatchQueue:dispatch_get_main_queue()]; 50 //加入通道 51 [self.xmppRoster activate:self.xmppStream]; 52 //好友代理 53 [self.xmppRoster addDelegate:self delegateQueue:dispatch_get_main_queue()]; 54 55 } 56 57 return self; 58 59 } 60 //登录 61 -(void)loginWithUserName:(NSString *)name Password:(NSString *)password 62 { 63 //保存用户名 64 self.xmppStream.myJID = [XMPPJID jidWithUser:name domain:kDomin resource:kResource]; 65 //保存连接目的 66 self.connectPurpose = ConnectToLogin; 67 //保存密码 68 self.loginPassword = password; 69 //连接服务器 70 [self conectToServer]; 71 72 } 73 //注册 74 -(void)registerWithUserName:(NSString *)name Password:(NSString *)password 75 { 76 self.xmppStream.myJID = [XMPPJID jidWithUser:name domain:kDomin resource:kResource]; 77 //保存连接目的 78 self.connectPurpose = ConnectTORegister; 79 //保存密码 80 self.registPassword = password; 81 //连接服务器 82 [self conectToServer]; 83 84 } 85 //连接 86 -(void)conectToServer 87 { 88 if (self.xmppStream.isConnected) { 89 XMPPPresence *presece = [XMPPPresence presenceWithType:@"unavailable"]; 90 [[XMPPManager defaultManager].xmppStream sendElement:presece]; 91 92 93 //断开连接 94 [self.xmppStream disconnect]; 95 } 96 //连接 97 [self.xmppStream connectWithTimeout:30 error:nil]; 98 } 99 100 //连接成功 101 -(void)xmppStreamDidConnect:(XMPPStream *)sender 102 { 103 NSLog(@"连接成功"); 104 //登录 105 //注册 106 switch (self.connectPurpose) { 107 case ConnectToLogin: 108 //登录 109 [self.xmppStream authenticateWithPassword:self.loginPassword error:nil]; 110 break; 111 case ConnectTORegister: 112 [self.xmppStream registerWithPassword:self.registPassword error:nil]; 113 break; 114 default: 115 break; 116 } 117 118 119 120 } 121 //连接失败 122 -(void)xmppStreamConnectDidTimeout:(XMPPStream *)sender 123 { 124 NSLog(@"连接失败"); 125 126 } 127 //登录成功 128 -(void)xmppStreamDidAuthenticate:(XMPPStream *)sender 129 { 130 NSLog(@"登录成功"); 131 //上线状态 132 XMPPPresence *presence = [XMPPPresence presenceWithType:@"available"]; 133 [[XMPPManager defaultManager].xmppStream sendElement:presence]; 134 } 135 //登录失败 136 -(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error 137 { 138 NSLog(@"登录失败"); 139 } 140 //注册成功 141 -(void)xmppStreamDidRegister:(XMPPStream *)sender 142 { 143 NSLog(@"注册成功"); 144 } 145 146 //注册失败 147 -(void)xmppStream:(XMPPStream *)sender didNotRegister:(DDXMLElement *)error 148 { 149 NSLog(@"注册失败"); 150 } 151 @end