- (void)viewDidLoad
{
[super viewDidLoad];
//stream流
_stream = [[XMPPStream alloc] init];
//设置服务器名称
[_stream setHostName:HOST];
[_stream addDelegate:self delegateQueue:dispatch_get_main_queue()];
_roster = [[XMPPRoster alloc] initWithRosterStorage:[[XMPPRosterCoreDataStorage alloc] init]];
[_roster addDelegate:self delegateQueue:dispatch_get_main_queue()];
[_roster activate:_stream];
}
//上线
-(void)goOnline
{
//<prseence/>
XMPPPresence *presence = [XMPPPresence presence];
[_stream sendElement:presence];
}
//下线
-(void)goOffline
{
//<presence type="unavailable"/>
XMPPPresence *prsence = [XMPPPresence presenceWithType:@"unavailable"];
[_stream sendElement:prsence];
[_stream disconnect];
}
//登陆
-(void)login:(id)sender
{
if (_stream.isConnected) {
[self goOffline];
}
//设置账号
[_stream setMyJID:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",_nameField.text,HOST]]];
_stream.tag = @"登陆";
//连接
[_stream connectWithTimeout:30 error:nil];
}
//注册
-(void)regist:(id)sender
{
if (_stream.isConnected) {
[self goOffline];
}
//设置账号
[_stream setMyJID:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",_nameField.text,HOST]]];
_stream.tag = @"注册";
//连接
[_stream connectWithTimeout:30 error:nil];
}
//连接成功
-(void)xmppStreamDidConnect:(XMPPStream *)sender
{
NSLog(@"连接成功");
//注册
if ([sender.tag isEqualToString:@"注册"]) {
[_stream registerWithPassword:_passwordField.text error:nil];
}
//登陆
if ([sender.tag isEqualToString:@"登陆"]) {
[_stream authenticateWithPassword:_passwordField.text error:nil];
}
}
//连接失败
-(void)xmppStreamConnectDidTimeout:(XMPPStream *)sender
{
NSLog(@"连接失败");
}
//登陆成功
-(void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
NSLog(@"登陆成功");
[self goOnline];
}
//注册成功
-(void)xmppStreamDidRegister:(XMPPStream *)sender
{
NSLog(@"注册成功");
}
//添加好友
-(void)addFriend:(id)sender
{
/*
<presence type="subscribe" to="">
*/
//第一种方法
// XMPPPresence *presence = [XMPPPresence presenceWithType:@"subscribe" to:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",_friendField.text,HOST]]];
// [_stream sendElement:presence];
//第二种方法
[_roster subscribePresenceToUser:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",_friendField.text,HOST]]];
}
//接收到好友列表
-(BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq
{
/*
<iq>
<query>
<Item jid=“令狐冲@1000phone.net”/>
<Item jid=“岳不群@1000phone.net”/>
……...
</query>
</iq>
*/
NSArray *query = iq.childElement.children;
for (NSXMLElement *item in query) {
NSLog(@"%@",[item attributeStringValueForName:@"jid"]);
}
return YES;
}
//同意添加好友
-(void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
{
if ([presence.fromStr isEqualToString:HOST]) {
return;
}
[_roster acceptPresenceSubscriptionRequestFrom:presence.from andAddToRoster:NO];
NSLog(@"同意添加%@为好友",presence.fromStr);
}
//发送消息
-(void)sendMessage:(id)sender
{
/*
<message type=“chat” to=“">
<body>
今天星期三
</body>
<image>
image base64
</image>
</message>
*/
XMPPMessage *message = [XMPPMessage messageWithType:@"chat" to:[XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@",_friendField.text,HOST]]];
NSXMLElement *body = [XMPPElement elementWithName:@"body" stringValue:_messageField.text];
[message addChild:body];
[_stream sendElement:message];
}
//接接收到消息
-(void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
NSLog(@"%@",message.XMLString);
}
//好友列表
-(void)getFriendList:(id)sender
{
/*
<iq type=“get” id=“roster”>
<query xmlns=“jabber:iq:roster”/>
</iq>
*/
XMPPIQ *iq = [XMPPIQ iqWithType:@"get"];
[iq addAttributeWithName:@"id" stringValue:@"roster"];
NSXMLElement *query = [XMPPElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];
[iq addChild:query];
[_stream sendElement:iq];
}