zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    java, listmap2json, fastjson
    java, mybatis, 调用mysql存储过程
    解析json串,利用正则表达式,split
    alibaba fastjson List<Map<String, String>>2Str
    getParameterMap()的返回值为Map<String, String[]>,从其中取得请求参数转为Map<String, String>的方法如下:
    message from server: "Host 'XXX' is not allowed to connect to this MySQL server
    Java之工厂方法
    oracle 的分析函数
    在js中怎样获得checkbox里选中的多个值?(jQuery)
    获得select被选中option的value和text
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5321232.html
Copyright © 2011-2022 走看看