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

//又一次连接

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得知--建立一个管理类的更多相关文章

  1. 控制uniFrame显示的一个管理类

    控制uniFrame显示的一个管理类 (2016-03-29 06:41:17) 转载▼ 标签: delphi 分类: uniGUI 利用uniGUI Frame的机制来搭建项目,是非常好的实现方式, ...

  2. MySQL建立一个连接工具类

    public class DBUtil { public static Connection getConn() { Connection conn = null; try { Class.forNa ...

  3. php建立一个空类: stdClass

    $pick = new stdClass; $pick->type = 'full'; ;

  4. 如何建立一个完整的游戏AI

    http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...

  5. Directx11教程(56) 建立一个skydome

    原文:Directx11教程(56) 建立一个skydome       本章建立一个skydome(天空穹),主要学习如何使用cube mapping.      cube map就是把六张纹理当作 ...

  6. 题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456".

    题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456". 关键:怎么将一个数字转换为字符? [cpp] view plaincopy ...

  7. 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM

    题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...

  8. Android 性能优化(16)线程优化:Creating a Manager for Multiple Threads 如何创建一个线程池管理类

    Creating a Manager for Multiple Threads 1.You should also read Processes and Threads The previous le ...

  9. [转]使用Scrapy建立一个网站抓取器

    英文原文:Build a Website Crawler based upon Scrapy 标签: Scrapy Python 209人收藏此文章, 我要收藏renwofei423 推荐于 11个月 ...

随机推荐

  1. Houdini Pyro流体的插值变速

    用简单的节点尝试了下Houdini流体的变速,这里的流体指的是Pyro,而不是FLIP.FLIP仅仅须要记录ID属性然后TimeBlend & TimeShift就可以. Vimeo 上图是一 ...

  2. 2015年十大热门Android开源新项目

    2015年十大热门Android开源新项目 2015 即将结束,又到了大家喜闻乐见的年终盘点时刻啦,今天给大家盘点一下 2015 年 Android 开发领域新出现的 10 大热门开源项目.数据来自于 ...

  3. 各种oracle10g下载地址(官网网页上好像找不到了)

    Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit ...

  4. SSH WebShell: SSH在线WEB管理器安装教程 - VPS管理百科

    SSH WebShell: SSH在线WEB管理器安装教程 - VPS管理百科 SSH WebShell: SSH在线WEB管理器安装教程 本站原创 [基于 署名-非商业使用-相同方式分享 2.5 协 ...

  5. umlの实现图

    在uml中大部分模型描写叙述了逻辑和设计方面的信息: 用例图知道期望 类图能够知道问题域的词汇(类.对象) 状态图.交互图和活动图能够知道类图中的词汇是怎样写作完毕行为的(逻辑结构) 实现图是用来描写 ...

  6. Django写的投票系统1(转)

    当然主要是从django的帮助文档里面来的,权当是翻译吧 这个投票系统的主要功能有 1.一个前台页面,可以让用户来投票 2.一个管理员页面,可以用来添加.修改.删除投票 首页第一步要确定你已经安装了D ...

  7. Python数据结构-字典

    tel={,} tel[ print(tel) print(tel['tom']) del tel['tom'] print(tel) print(tel.keys()) 运行结果: {, , } { ...

  8. Revit 2015 公布!

    Revit 2015 公布了, 如今能够下载.大家能够搜索下中文版的下载. 之前就知道2015 的模型操作速度再次提高, 2015安装后的马上载入跑了一个模型.果然,2015 打开自带的高级模型,不管 ...

  9. JVM最多支持多少个线程?

    JVM最多支持多少个线程? McGovernTheory在StackOverflow提了这样一个问题: Java虚拟机最多支持多少个线程?跟虚拟机开发商有关么?跟操作系统呢?还有其他的因素吗? Edd ...

  10. PowerDesigner 对 Oracle 作 逆向工程

    原文 PowerDesigner 对 Oracle 作 逆向工程 目的 PowerDesigner 15对OracleClient 11g进行逆向工程 环境 Win7 64位系统 Oracle 11g ...