XMPP学习--建立管理类
来源:互联网 发布:linux三个启动命令 编辑:程序博客网 时间:2024/05/29 03:55
参考了别人的demo之后发现建立一个管理类看起来舒服些,显得比较有条理……
但在建立与服务器连接当中,发现
Connect Error: {
NSLocalizedDescription = "You must set myJID before calling connect.";
}
这样的一个问题,知道是jid没有设置好,但是jid怎么设置呢?今天仍然没有弄清,如果有清楚的可以交流一下。1.将管理类写成单例
staticXmppManager *shareManager = Nil;
+ (XmppManager *)shareInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
shareManager = [[XmppManageralloc] init];
[shareManagersetupXMPPStream];
});
returnshareManager;
}
2.建立XML流,确定代理方法
- (void)setupXMPPStream
{
xmppStream = [[XMPPStreamalloc] init];
#if !TARGET_OS_IPHONE
//非模拟器时可进入后台工作
xmppStream.enableBackgroundingOnSocket =YES;
#endif
//代理
[xmppStreamaddDelegate:selfdelegateQueue:dispatch_get_main_queue()];
[xmppStreamsetHostName:kXMPPHost];
[xmppStreamsetHostPort:5222];
//重新连接
reconnect = [[XMPPReconnectalloc] init];
//花名册
XMPPRosterCoreDataStorage *rosterStorage = [[XMPPRosterCoreDataStoragealloc] initWithInMemoryStore];
roster = [[XMPPRosteralloc] initWithRosterStorage:rosterStorage];
[rosteraddDelegate:selfdelegateQueue:dispatch_get_main_queue()];
[reconnectactivate:xmppStream];
[rosteractivate:xmppStream];
allowSSLHostNameMismatch =YES;
allowSelfSignedCertificates =YES;
}
3.在dealloc消除XML流
- (void)dealloc
{
[selfsetoutXMPPStream];
}
- (void)setoutXMPPStream
{
[xmppStreamremoveDelegate:self];
[reconnectdeactivate];
[rosterdeactivate];
[xmppStreamdisconnect];
xmppStream =Nil;
reconnect =Nil;
roster = Nil;
}
4.写用户的各种状态:上线,离线,离开,勿扰…..
#pragma mark - 用户状态
/*
presence 的状态:
available 上线
away 离开
do not disturb 忙碌
unavailable 下线
*/
- (void)goonline
{
XMPPPresence *presence = [XMPPPresencepresenceWithType:@"available"];
[xmppStreamsendElement:presence];
}
- (void)gooffline
{
XMPPPresence *presence = [XMPPPresencepresenceWithType:@"unavailable"];
[xmppStreamsendElement:presence];
}
- (void)away
{
XMPPPresence *presence = [XMPPPresencepresenceWithType:@"away"];
[xmppStreamsendElement:presence];
}
- (void)busy
{
XMPPPresence *presence = [XMPPPresencepresenceWithType:@"do not disturb"];
[xmppStreamsendElement:presence];
}
5.写用户的各种操作:添加好友,删除好友,发送消息
#pragma mark - 用户操作
//增加成员
- (void)addSomeBody:(NSString *)userId
{
[rostersubscribePresenceToUser:[XMPPJIDjidWithString:[NSStringstringWithFormat:@"%@@qq.com",userId]]];
}
//删除好友
- (void)deleteSomeBody:(NSString *)userId
{
[rosterunsubscribePresenceFromUser:[XMPPJIDjidWithString:[NSStringstringWithFormat:@"%@@qq.com",userId]]];
}
//发送消息
- (void)sendMessage:(NSString *)message toUser:(NSString *)user
{
NSXMLElement *body = [NSXMLElementelementWithName:@"body"];
[bodysetStringValue:message];
NSXMLElement *message_ = [NSXMLElementelementWithName:@"message"];
[message_ addAttributeWithName:@"type"stringValue:@"chat"];
NSString *to = [NSStringstringWithFormat:@"%@@qq.com", user];
[message_ addAttributeWithName:@"to"stringValue:to];
[message_addChild:body];
[xmppStreamsendElement:message_];
}
6.还有系统操作
#pragma mark - 系统操作
- (BOOL)connect
{
if (![xmppStreamisDisconnected]) {
return YES;
}
NSString *user = [[NSUserDefaultsstandardUserDefaults] stringForKey:kXMPPmyJID];
NSString *password = [[NSUserDefaultsstandardUserDefaults] stringForKey:kXMPPmyPassword];
XMPPJID *jid = [XMPPJIDjidWithUser:user domain:@""resource:@""];
[xmppStreamsetMyJID:jid];
passWord = password;
returnYES;
}
- (void)disconnect
{
[selfgooffline];
[xmppStreamdisconnect];
}
- XMPP学习--建立管理类
- XMPP学习--环境搭建
- XMPP 学习笔记六 C#用户管理
- XMPP学习
- XMPP学习
- XMPP学习
- XMPP 学习!
- xmpp学习
- XMPP 学习
- xmpp学习
- XMPP学习1-认识XMPP
- XMPP离线管理
- Xmpp问题总结:XMPP离线管理
- Xmpp问题总结:XMPP离线管理
- iOS-IM From XMPP.3 XMPP登录
- iOS-IM From XMPP.1 初识XMPP
- Jabber客户端-XMPP应用
- XMPP中roster的管理
- State(状态模式)
- leetcode: Merge Intervals
- 当vector中存储的类型为指针时,vector.clear()的执行结果
- eclipse中使用tomcat调试web
- HDU 1171 Big Event in HDU (母函数)
- XMPP学习--建立管理类
- DirectUI再思考
- android 中FragmentActivity中模拟返回键返回上一个Activity效果
- Oracle根据日志文件查询SQL
- Rete算法简要描述
- pscp实现windows和linux之间互传文件
- 今日学习体会
- hdu 1026
- Spring在web.xml请求中定义编码(org.springframework.web.filter.CharacterEncodingFilter)