XMPP学习记录四:关于接受,发送消息和获取好友上下线的状态

2014-11-24 03:04:28 · 作者: · 浏览: 1

消息

[cpp]
  1. //收到消息
  2. - (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message{
  3. // NSLog(@message = %@, message);
  4. //消息的内容
  5. NSString *msg = [[message elementForName:@body] stringValue];
  6. //消息发送者
  7. NSString *from = [[message attributeForName:@from] stringValue];
  8. /****在此处****/
  9. //通知聊天页面有新消息,需要处理
  10. }


    发送消息

    [cpp]
    1. //发送消息的xml格式
    2. to='接收者账号'
    3. type='chat'>
    4. //代码组装

      [cpp] view plaincopyprint
      1. NSString *message = @HELLO WORLD;
      2. NSXMLElement *body = [NSXMLElement elementWithName:@body];
      3. [body setStringValue:message];
      4. //生成XML消息文档
      5. NSXMLElement *mes = [NSXMLElement elementWithName:@message];
      6. //消息类型
      7. [mes addAttributeWithName:@type stringValue:@chat];
      8. //发送给谁
      9. [mes addAttributeWithName:@to stringValue:@接受者账号];
      10. //由谁发送
      11. [mes addAttributeWithName:@from stringValue:@发送者账号];
      12. //组合
      13. [mes addChild:body];
      14. //发送消息
      15. [[self xmppStream] sendElement:mes];

        好友上下线通知

        [cpp]
        1. - (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence
        2. {
        3. //取得好友状态
        4. NSString *presenceType = [presence type]; //online/offline
        5. //当前用户
        6. NSString *userId = [[sender myJID] user];
        7. //在线用户
        8. NSString *presenceFromUser = [[presence from] user];
        9. /*
        10. //如果不是自己,如果涉及多段登录,此处最好加上else,如果是自己离线的话,调用上线协议
        11. XMPPPresence *presence = [XMPPPresence presence];
        12. [[self xmppStream] sendElement:presence];
        13. */
        14. if (![presenceFromUser isEqualToString:userId])
        15. {
        16. //用户在线
        17. if ([presenceType isEqualToString:@available])
        18. {
        19. //列表和数据库都要相应改变
        20. }else if ([presenceType isEqualToString:@unavailable])//用户不在线
        21. {
        22. //列表和数据库都要相应改变
        23. }
        24. }
        25. }