XMPP得知--建立一个管理类
参考其他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得知--建立一个管理类的更多相关文章
- 控制uniFrame显示的一个管理类
控制uniFrame显示的一个管理类 (2016-03-29 06:41:17) 转载▼ 标签: delphi 分类: uniGUI 利用uniGUI Frame的机制来搭建项目,是非常好的实现方式, ...
- MySQL建立一个连接工具类
public class DBUtil { public static Connection getConn() { Connection conn = null; try { Class.forNa ...
- php建立一个空类: stdClass
$pick = new stdClass; $pick->type = 'full'; ;
- 如何建立一个完整的游戏AI
http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...
- Directx11教程(56) 建立一个skydome
原文:Directx11教程(56) 建立一个skydome 本章建立一个skydome(天空穹),主要学习如何使用cube mapping. cube map就是把六张纹理当作 ...
- 题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456".
题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456". 关键:怎么将一个数字转换为字符? [cpp] view plaincopy ...
- 在存放源程序的文件夹中建立一个子文件夹 myPackage。例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage)。在 myPackage 包中创建一个YMD类,该类具有计算今年的年份、可以输出一个带有年月日的字符串的功能。设计程序SY31.java,给定某人姓名和出生日期,计算该人年龄,并输出该人姓名、年龄、出生日期。程序使用YM
题目补充: 在存放源程序的文件夹中建立一个子文件夹 myPackage.例如,在“D:\java”文件夹之中创建一个与包同名的子文件夹 myPackage(D:\java\myPackage).在 m ...
- 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 ...
- [转]使用Scrapy建立一个网站抓取器
英文原文:Build a Website Crawler based upon Scrapy 标签: Scrapy Python 209人收藏此文章, 我要收藏renwofei423 推荐于 11个月 ...
随机推荐
- 关于hibernate中多对多关系
关于多对多关系 数据库:在使用多对多的关系时,我们能够使用复合主键.也能够不使用,直接引入外键相同能够实现. 在数据库中使用多对多关系时,须要一个中间表. 多对多关系中的数据库结构例如以下: 表:Or ...
- No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv7s)
问题: No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=arm64, VALID_ARCHS=armv7 armv ...
- Android实战简易教程-第九枪(BitmapFactory.Options对资源图片进行缩放)
我们知道,我们编写的应用程序都是有一定内存限制的.程序占用了过高的内存就easy出现OOM(OutOfMemory)异常.因此在展示高分辨率图片的时候,最好先将图片进行压缩,压缩后的图片大小应该和用来 ...
- ubuntu/linux mint 创建proc文件的三种方法(四)
在做内核驱动开发的时候,能够使用/proc下的文件,获取对应的信息,以便调试. 大多数/proc下的文件是仅仅读的,但为了演示样例的完整性,都提供了写方法. 方法一:使用create_proc_ent ...
- ASA QOS限速
cisco的Qos限速和H3C的有点区别,不过总体来说,H3C的比较渣,单位是不一样的,H3C 的CAR单位的是kpbs,而cisco police限速时的单位是Bits per seconds,H3 ...
- Application.mk中APP_ABI 的含义
我们在编写JNI代码时有一个可选的文件Application.mk ,这个文件你可以不创建,但是有时候是有必要写一个这样的文件的. Application.mk文件用于描述应用程序本身的一些属性信息, ...
- 编译v8引擎
本机环境是win7+vs2010(本来想用2012的,但是发现默认的项目是2010的) 1.首先下载V8的源码 安装好svn,并在cmd下能使用svn help: svn下载地址(安装包):http: ...
- ubuntu Linux 安装和首次使用
1.ubuntu Linux 安装后切换到root账户,在默认情况下,系统安装过程中需要创建一个用户,切换到root账号命令如下:$ sudo -s -H输入 当前账户密码就可以切换到root.2.u ...
- 6 款好用的 PC+Android 同步 GTD 软件
6 款好用的 PC+Android 同步 GTD 软件 最近老鼠工作积极性比较高(其实只要是买平板电脑的欲望在鼓舞着干劲),所以每天很多任务安排,为了不混乱,免不了要用 GTD(Go to do)软件 ...
- Javascript异步数据的同步处理方法
数据处理方法封装 var DataWatch=(function(){ var gWatch={},cursor= 0,callback_key = 'callback',gMap={}; var c ...