您的位置:首页 > 移动开发

XAPP的使用

2016-02-25 20:52 330 查看
1.XMPP和XAMPP区别

XMPP是一个协议,有四个特点:点对点 及时性 协议 基于XML数据结构

XAMPP(集成软件,开源框架组成,具有很好的自定义和扩展性)

X (Linux+Window +MacOSX)

Apache

Mysql

Php(脚本语言)

Perl(脚本语言)

XMPP的管理类的使用

1.环境的配置

第一步:引入libresolv.tbd和libxml2.tbd系统类库,一般只要是xml的数据结构,就需要引入这两个,同时需要配置 Header Search Paths 为  /usr/include/libxml2

第二步:在XMPP的第三方引入库的Core文件夹下的XMPP.h文件中引入   #import <UIKit/UIKit.h>  

第三步:将最后错误处的代码注释掉,因为这处的代码是重复定义的

2.管理类的创建

.h文件

#import <Foundation/Foundation.h>

#import "XMPPFramework.h"

@interface XMPPManager : NSObject

@property (nonatomic,strong)XMPPStream *xmppStream;

+(instancetype)shareInstance;

-(void)registerWithUserName:(NSString *)name

                   passWord:(NSString *)passWord;

-(void)loginWithUserName:(NSString *)name

                passWord:(NSString *)passWord;

@end

.m文件

#import "XMPPManager.h"

typedef enum : NSUInteger {

    ConnectPurposeRegister,

    ConnectPurposeLogin,

} ConnectPurpose;

@interface XMPPManager ()<XMPPStreamDelegate>

@property (nonatomic,strong)NSString *registerPassWord;

@property (nonatomic,strong)NSString *loginPassWord;

@property (nonatomic)ConnectPurpose connectPurpose;

@end

static XMPPManager *manager = nil;

@implementation XMPPManager

+(instancetype)shareInstance{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        manager = [XMPPManager new];

        

    });

    return manager;

}

-(instancetype)init{

    self = [super init];

    if (self) {

        _xmppStream = [[XMPPStream alloc] init];

        _xmppStream.hostName = kHostName;

        _xmppStream.hostPort = kHostPort;

        [_xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];

    }

   

    return self;

}

-(void)connectServer{

    if ([self.xmppStream isConnected]) {

        [self.xmppStream disconnect];

    }

    NSError *error = nil;

    [self.xmppStream connectWithTimeout:20.f error:&error];

    NSLog(@"%@",error);

}

-(void)registerWithUserName:(NSString *)name

                   passWord:(NSString *)passWord{

    self.registerPassWord = passWord;

    self.connectPurpose  = ConnectPurposeRegister;

    XMPPJID *jid =[XMPPJID jidWithUser:name domain:kDomin resource:kResource];

    self.xmppStream.myJID=  jid;

    

    [self connectServer];

    

}

-(void)loginWithUserName:(NSString *)name

                passWord:(NSString *)passWord{

    self.loginPassWord = passWord;

    self.connectPurpose  = ConnectPurposeLogin;

    XMPPJID *jid =[XMPPJID jidWithUser:name domain:kDomin resource:kResource];

    self.xmppStream.myJID=  jid;

    

    [self connectServer];

}

-(void)xmppStreamDidConnect:(XMPPStream *)sender{

    if (self.connectPurpose==ConnectPurposeRegister) {

        NSError *error = nil;

        [self.xmppStream registerWithPassword:self.registerPassWord error:&error];

    }

    if (self.connectPurpose==ConnectPurposeLogin) {

        NSError *error = nil;

        [self.xmppStream authenticateWithPassword:self.loginPassWord error:&error];

    }

}

-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{

    XMPPPresence *presence = [XMPPPresence presenceWithType:@"available"];

    [self.xmppStream sendElement:presence];

    

}

@end

注意:以下是各个代理的方法

#pragma mark XMPPStreamDelegate

#pragma mark 连接成功

-(void)xmppStreamDidConnect:(XMPPStream *)sender{

   

}

#pragma mark 连接超时

-(void)xmppStreamConnectDidTimeout:(XMPPStream *)sender{

   

}

#pragma mark 连接丢失

-(void)xmppStreamDidDisconnect:(XMPPStream *)sender withError:(NSError *)error{

 

}

#pragma mark 注册成功

-(void)xmppStreamDidRegister:(XMPPStream *)sender{

   

}

#pragma mark 注册失败

-(void)xmppStream:(XMPPStream *)sender didNotRegister:(DDXMLElement *)error{

  }

#pragma mark 验证成功

-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{

 

}

#pragma mark 验证失败

-(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{

 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: