你不需要详细了解服务器端离线消息是怎么保存的,你要做机器人,需要的是登陆一个jabber帐号,然后侦听
你感兴趣的消息类型,然后做对应的响应就行了,消息是属于Packet类型的,所以你主要侦听该类型消息即可。
从该消息中,你可以获得该消息从哪里来的,简单的,你将消息的主体解析出来,原样发回去给他,就形成一个
xmpp机器人了。

解决方案 »

  1.   

    openfire服务器端的离线消息的确是保存在数据库里面,在数据库里面有一个表专门保存离线消息,应该是通过判断用户是否离线才确定是否要保存在数据库中,在数据库中保存的是xml流,里面有时间信息,普通消息是不会保存的。不太清楚这是不是你要的信息,前一段时间用过现在有的忘记了,再交流。
      

  2.   


    呵呵,谢谢大家的帮忙,大家说的很对,我已找到答案了:
    首先离线消息是需要保存的,要不消息会丢失,这是大家都不愿看到的
    离线监听事件:OfflineMessageListener 
    具体保存离线消息代码: public void addMessage(Message message) 
    {
            Connection con = null;
            PreparedStatement pstmt = null;
            try {
                con = DbConnectionManager.getConnection(); //连接数据库
                
                pstmt = con.prepareStatement(INSERT_OFFLINE);
              // private static final String INSERT_OFFLINE =
                //"INSERT INTO jiveOffline (username, messageID, creationDate, messageSize, stanza) " +
                //"VALUES (?, ?, ?, ?, ?)";            pstmt.setString(1, username);
                pstmt.setLong(2, messageID);
                pstmt.setString(3, StringUtils.dateToMillis(new java.util.Date()));
                pstmt.setInt(4, msgXML.length());
                pstmt.setString(5, msgXML);//具体这些参数的获取不做说明了
                pstmt.executeUpdate();
           
                DbConnectionManager.closeConnection(pstmt, con);
          }