openfire中添加好友发送验证消息

openfire中添加好友发送验证消息

  (2015-01-27 10:34:00)
标签: 

股票

分类: IM研究
openfire中添加好友没有提供验证消息的功能,为此,我们对其进行了添加。这个需要服务端和客户端协同配合。
首先在添加好友时,会发送一个IQ,一个presence。如果好友在线的话会收到presence中携带的信息,而在对方离线的情况下是收不到这个presence中携带的信息。
我们的处理方式是在IQ上同时绑定一个同样的信息。将该信息存入到数据库,同时有助于云端存储。
处理逻辑如下:
一、在IQRosterHandler.java的handleIQ(IQ packet)中对IQ进行操作。
//判断是否含有验证信息
                  if(packet.toString().contains("urn:rndchina:validationmessage")){
                  Element element = packet.getElement().element("x");
                  String body = element.elementText("body");
                  JID from = packet.getFrom();
                  String to = packet.getElement().element("query").element("item").attributeValue("jid");
                  ValidateMessageStore message = new ValidateMessageStore();
                  message.addOrUpdateMessage(from.getNode(), to, body);
                  }
ValidateMessageStore是一个操作数据库的类,很简单不在赘述。
二、在PresenceUpdateHandler.java中的initSession(ClientSession session)中会判断是否有申请添加好友的信息,
if (item.getRecvStatus() == RosterItem.RECV_SUBSCRIBE) {
                                    session.process(createSubscribePresence(item.getJid(),
                                                session.getAddress().asBareJID(), true));
                              } else if (item.getRecvStatus() == RosterItem.RECV_UNSUBSCRIBE) {
                                    session.process(createSubscribePresence(item.getJid(),
                                                session.getAddress().asBareJID(), false));
                              }
                              if (item.getSubStatus() == RosterItem.SUB_TO
                                          || item.getSubStatus() == RosterItem.SUB_BOTH) {
                                    presenceManager.probePresence(session.getAddress(), item.getJid());
                              }
通过以上代码会发现,如果有未处理的好友申请信息,会给当前用户发送一个presence。我们对createSubscribePresence()方法进行了改进,具体如下:
  public Presence createSubscribePresence(JID senderAddress, JID targetJID, boolean isSubscribe) {
            Presence presence = new Presence();
            presence.setFrom(senderAddress);
            presence.setTo(targetJID);
             //判断其有没有验证信息
        ValidateMessageStore validateStore = new ValidateMessageStore();
        String body = validateStore.getMessage(senderAddress.asBareJID().getNode(),targetJID.asBareJID().toString());
        if(body!=null){
        ValidationMessage message = new ValidationMessage(body);
        presence.addExtension(message);
    }
            if (isSubscribe) {
                  presence.setType(Presence.Type.subscribe);
            }
            else {
                  presence.setType(Presence.Type.unsubscribe);
            }
            return presence;
      }
这样即便对方不在线,下次登录的时候就可以接收到添加好友的验证消息。同时也在服务器进行了相关存储。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值