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

 

posted @ 2016-03-25 21:19  恒远也  阅读(151)  评论(0编辑  收藏  举报