码迷,mamicode.com
首页 > 其他好文 > 详细

XMPP得知--建立一个管理类

时间:2015-09-28 16:03:58      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

参考其他demo之后,设立一个管理类的发现看起来更舒服,理……

但在建立与server连接其中。发现

Connect Error: {

    NSLocalizedDescription = "You must set myJID before calling connect.";

}

这种一个问题。知道是jid没有设置好,可是jid怎么设置呢?今天仍然没有弄清。假设有清楚的能够交流一下。


1.将管理类写成单例

static XmppManager *shareManager = Nil;

+ (XmppManager *)shareInstance

{

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        shareManager = [[XmppManager alloc] init];

        [shareManager setupXMPPStream];

    });

    

    return shareManager;

}


2.建立XML流,确定代理方法

- (void)setupXMPPStream

{

    xmppStream = [[XMPPStream alloc] init];

    

#if !TARGET_OS_IPHONE

    //非模拟器时可进入后台工作

    xmppStream.enableBackgroundingOnSocket = YES;

#endif

    //代理

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

    

    [xmppStream setHostName:kXMPPHost];

    [xmppStream setHostPort:5222];

    

    //又一次连接

    reconnect = [[XMPPReconnect alloc] init];

    

    //花名冊

    XMPPRosterCoreDataStorage *rosterStorage = [[XMPPRosterCoreDataStorage alloc] initWithInMemoryStore];

    roster = [[XMPPRoster alloc] initWithRosterStorage:rosterStorage];

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

    [reconnect activate:xmppStream];

    [roster activate:xmppStream];

    

    allowSSLHostNameMismatch = YES;

    allowSelfSignedCertificates = YES;

}


3.在dealloc消除XML流

- (void)dealloc

{

    [self setoutXMPPStream];

}


- (void)setoutXMPPStream

{

    [xmppStream removeDelegate:self];

    [reconnect deactivate];

    [roster deactivate];

    [xmppStream disconnect];

    xmppStream = Nil;

    reconnect = Nil;

    roster = Nil;

}


4.写用户的各种状态:上线,离线,离开。勿扰…..

#pragma mark - 用户状态

/*

 presence 的状态:

 available 上线

 away 离开

 do not disturb 忙碌

 unavailable 下线

 */


- (void)goonline

{

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

    [xmppStream sendElement:presence];

}


- (void)gooffline

{

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

    [xmppStream sendElement:presence];

}


- (void)away

{

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

    [xmppStream sendElement:presence];

}


- (void)busy

{

    XMPPPresence *presence = [XMPPPresence presenceWithType:@"do not disturb"];

    [xmppStream sendElement:presence];

}


5.写用户的各种操作:加入好友,删除好友,发送消息

#pragma mark - 用户操作

//添加成员

- (void)addSomeBody:(NSString *)userId

{

    [roster subscribePresenceToUser:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@qq.com",userId]]];

}


//删除好友

- (void)deleteSomeBody:(NSString *)userId

{

    [roster unsubscribePresenceFromUser:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@qq.com",userId]]];

}


//发送消息

- (void)sendMessage:(NSString *)message toUser:(NSString *)user

{

    NSXMLElement *body = [NSXMLElement elementWithName:@"body"];

    [body setStringValue:message];

    NSXMLElement *message_ = [NSXMLElement elementWithName:@"message"];

    [message_ addAttributeWithName:@"type" stringValue:@"chat"];

    NSString *to = [NSString stringWithFormat:@"%@@qq.com", user];

    [message_ addAttributeWithName:@"to" stringValue:to];

    [message_ addChild:body];

    [xmppStream sendElement:message_];

}


6.还有系统操作

#pragma mark - 系统操作

- (BOOL)connect

{

    if (![xmppStream isDisconnected]) {

        return YES;

    }

    NSString *user = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyJID];

    NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:kXMPPmyPassword];

    

    XMPPJID *jid = [XMPPJID jidWithUser:user domain:@"" resource:@""];

    [xmppStream setMyJID:jid];

    passWord = password;

    

    return YES;

    

}


- (void)disconnect

{

    [self gooffline];

    [xmppStream disconnect];

}

版权声明:本文博主原创文章。博客,未经同意不得转载。

XMPP得知--建立一个管理类

标签:

原文地址:http://www.cnblogs.com/yxwkf/p/4844132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!