现在的位置: 首页 > 综合 > 正文

[iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端二)

2013年09月10日 ⁄ 综合 ⁄ 共 3329字 ⁄ 字号 评论关闭

接上一章的,这一章我们着重介绍XMPP

为了方便程序调用,我们把XMPP的一些主要方法写在AppDelegate中


在AppDelegate.m下这几个方法为:

[java] view
plain
copy

  1. -(void)setupStream{  
  2.       
  3.     //初始化XMPPStream  
  4.     xmppStream = [[XMPPStream alloc] init];  
  5.     [xmppStream addDelegate:self delegateQueue:dispatch_get_current_queue()];  
  6.       
  7. }  
  8.   
  9. -(void)goOnline{  
  10.       
  11.     //发送在线状态  
  12.     XMPPPresence *presence = [XMPPPresence presence];  
  13.     [[self xmppStream] sendElement:presence];  
  14.       
  15. }  
  16.   
  17. -(void)goOffline{  
  18.       
  19.     //发送下线状态  
  20.     XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];  
  21.     [[self xmppStream] sendElement:presence];  
  22.       
  23. }  
  24.   
  25. -(BOOL)connect{  
  26.       
  27.     [self setupStream];  
  28.       
  29.     //从本地取得用户名,密码和服务器地址  
  30.     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];  
  31.       
  32.     NSString *userId = [defaults stringForKey:USERID];  
  33.     NSString *pass = [defaults stringForKey:PASS];  
  34.     NSString *server = [defaults stringForKey:SERVER];  
  35.       
  36.     if (![xmppStream isDisconnected]) {  
  37.         return YES;  
  38.     }  
  39.       
  40.     if (userId == nil || pass == nil) {  
  41.         return NO;  
  42.     }  
  43.       
  44.     //设置用户  
  45.     [xmppStream setMyJID:[XMPPJID jidWithString:userId]];  
  46.     //设置服务器  
  47.     [xmppStream setHostName:server];  
  48.     //密码  
  49.     password = pass;  
  50.       
  51.     //连接服务器  
  52.     NSError *error = nil;  
  53.     if (![xmppStream connect:&error]) {  
  54.         NSLog(@"cant connect %@", server);  
  55.         return NO;  
  56.     }  
  57.       
  58.     return YES;  
  59.   
  60. }  
  61.   
  62. -(void)disconnect{  
  63.       
  64.     [self goOffline];  
  65.     [xmppStream disconnect];  
  66.       
  67. }  

这几个是基础方法,接下来就是XMPPStreamDelegate中的方法,也是接受好友状态,接受消息的重要方法

[java] view
plain
copy

  1. //连接服务器  
  2. - (void)xmppStreamDidConnect:(XMPPStream *)sender{  
  3.       
  4.     isOpen = YES;  
  5.     NSError *error = nil;  
  6.     //验证密码  
  7.     [[self xmppStream] authenticateWithPassword:password error:&error];  
  8.       
  9. }  
  10.   
  11. //验证通过  
  12. - (void)xmppStreamDidAuthenticate:(XMPPStream *)sender{  
  13.       
  14.     [self goOnline];  
  15. }  
  16.   
  17. //收到消息  
  18. - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{  
  19.       
  20. //    NSLog(@"message = %@", message);  
  21.       
  22.     NSString *msg = [[message elementForName:@"body"] stringValue];  
  23.     NSString *from = [[message attributeForName:@"from"] stringValue];  
  24.       
  25.     NSMutableDictionary *dict = [NSMutableDictionary dictionary];  
  26.     [dict setObject:msg forKey:@"msg"];  
  27.     [dict setObject:from forKey:@"sender"];  
  28.       
  29.     //消息委托(这个后面讲)  
  30.     [messageDelegate newMessageReceived:dict];  
  31.       
  32. }  
  33.   
  34. //收到好友状态  
  35. - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence{  
  36.       
  37. //    NSLog(@"presence = %@", presence);  
  38.       
  39.     //取得好友状态  
  40.     NSString *presenceType = [presence type]; //online/offline  
  41.     //当前用户  
  42.     NSString *userId = [[sender myJID] user];  
  43.     //在线用户  
  44.     NSString *presenceFromUser = [[presence from] user];  
  45.       
  46.     if (![presenceFromUser isEqualToString:userId]) {  
  47.           
  48.         //在线状态  
  49.         if ([presenceType isEqualToString:@"available"]) {  
  50.               
  51.             //用户列表委托(后面讲)  
  52.             [chatDelegate newBuddyOnline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"nqc1338a"]];  
  53.               
  54.         }else if ([presenceType isEqualToString:@"unavailable"]) {  
  55.             //用户列表委托(后面讲)  
  56.             [chatDelegate buddyWentOffline:[NSString stringWithFormat:@"%@@%@", presenceFromUser, @"nqc1338a"]];  
  57.         }  
  58.           
  59.     }  

抱歉!评论已关闭.