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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 从 Windows 过度到 Mac 必备快捷键对照表(IntelliJ IDEA)

    为了方便从Windows系统过度到Mac系统的IDEA使用者,本文列出了详细的快捷键对照表。

    2022年4月12日
  • idea2018激活码【2021免费激活】[通俗易懂]

    (idea2018激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1M3Q9SD5XW-eyJsa…

    2022年3月28日
  • 一小伙使用 python爬虫来算命?

    一小伙使用 python爬虫来算命?文章目录前言1.网站分析2.获取内容3.代码4.实操5.代码整合前言相信在日常生活中,平常大家聚在一起总会聊聊天,特别是女生(有冒犯的doge)非常喜欢聊星座,这个男生什么星座呀,那个男生什么星座呀…今天我就来满足各位的需求,通过爬虫来知晓上天的安排:开搞!1.网站分析第一步呢,咋们先打开这个网站:https://www.horoscope.com/us/index.aspx大家就能看到这个页面了我们今天呢,就先做一个通过星座来得知三天的运势的小玩意,这里有十二个星座,我点了第一个和第二个

    2022年7月25日
  • Spring Cloud 学习笔记(1 / 3)「建议收藏」

    SpringCloud学习笔记(2/3)SpringCloud学习笔记(3/3)—01_前言闲聊和课程说明02_零基础微服务架构理论入门03_第二季Boot和Cloud版本选型04_Cloud组件停更说明05_父工程Project空间新建06_父工程pom文件07_复习DependencyManagement和Dependencies08_支付模块构建(上)09_支付模块构建(中)10_支付模块构建(下)11_热部署Devtool

    2022年4月13日
  • MySQL自增主键值回溯问题

    MySQL自增主键值回溯问题平时我们使用MySQL时,通常每一个表都会有一个自增主键ID,每新增一条数据,ID值就会自增1。但在8.0之前版本的MySQL中,这个自增值会存在一个回溯的问题。例如,在一个新表中插入三条主键为1、2、3的数据行,这时候用SHOWCREATETABLE命令查看该表的AUTO_INCREMENT的值是4,这是没问题的。然后把ID=3的数据行删掉,再次查询AUTO_INCREMENT的值,依然是4,这也是没问题的。但如果重启一下MySQL,这个值就会变回3,而不是4,发生了回溯。这是因为AUTO_I

    2022年6月16日
  • Access 通用数据访问类(asp.net 2.0 c#)

    Access 通用数据访问类(asp.net 2.0 c#)

    2021年7月25日

发表回复

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

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