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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

参考其他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];

}

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116879.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 12位adc的分辨率计算_ADC的量化误差

    12位adc的分辨率计算_ADC的量化误差(一)一个基本概念分贝(dB):按照对数定义的一个幅度单位。对于电压值,dB以20log(VA/VB)给出;对于功率值,以10log(PA/PB)给出。dBc是相对于一个载波信号的dB值;dBm是相对

    2022年8月4日
    4
  • C++传递函数指针[通俗易懂]

    C++传递函数指针

    2022年1月17日
    59
  • 嘘…偷偷教你破解“朋友圈三天可见”「建议收藏」

    嘘…偷偷教你破解“朋友圈三天可见”「建议收藏」点击上方[全栈开发者社区]→右上角[…]→[设为星标⭐]在微信公开课上,腾讯高级执行副总裁、微信事业群总裁张小龙说:朋友圈状态设置三天可见的人数超过了一亿人,这个开关是微信里使用率最…

    2022年4月28日
    97
  • 稀疏矩阵转置多种算法详解

    稀疏矩阵转置多种算法详解这次博文写的有点长,因为我得构思,所以今天晚上(11.10)写一点,另外还有个重要的任务,因为再过40分钟就是剁手节了,过了今晚我不止是一个光棍,更是一个穷光棍、、、、我该怎么办。。。求拦截。不扯了正题,今天就先写写矩阵转置吧,现实中转置么,不就区区一个转置么,那有什么,瞅一眼就转过来了。计算机就是计算机,他没有相发也没有眼睛,那么我们就来告诉他怎么思考,怎么走路吧。方法一:一般转置(简单)转置矩阵

    2022年6月22日
    36
  • JSONPath 表达式

    JSONPath 表达式JSONPath是参照,xpath表达式来解析xml文档的方式,json数据结构通常是匿名的并且不一定需要有根元素。JSONPaht用一个抽象的名字$来表示最外层对象。JOSNPath表达式可以使用. 符号如下:$.store.book[0].title或者使用[]符号$[‘store’][‘book’][0][‘title’]从输入路径来看。内部或者输出的路径都会转化成-符号。JSON…

    2022年6月16日
    32
  • Carson带你学Android:这是一份详细的 Retrofit使用教程(含实例讲解)[通俗易懂]

    前言在Andrroid开发中,网络请求十分常用而在Android网络请求库中,Retrofit是当下最热的一个网络请求库今天,我将献上一份非常详细Retrofitv2.0的使用教程,希望你们会喜欢。如果对Retrofitv2.0的源码感兴趣,可看文章:Android:手把手带你深入剖析Retrofit2.0源码目录![目录](http://upload-

    2022年4月13日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号