`

[原]OpenFire Vcard的代码分析

阅读更多
原帖地址:http://www.cnblogs.com/jizha/archive/2013/06/07/openfire_vcard.html

 

VCardProvider:
所有提供vcard服务的程序需要实现的接口,包括如下功能:
  • loadVCard:通过用户名加载vcard
  • createVCard:新建vcard
  • updateVCard:更新已有vcard
  • deleteVCard:删除vcard
  • isReadOnly:vcardProvider是否为只读(不允许写入和更新)
DefaultVCardProvider implements VCardProvider:
1、提供对VCardProvider接口的默认实现,从本地数据表ofvcard中读写数据。当然也可以有其他实现,如从ldap数据源获取vcard信息,只需要实现该VCardProvider接口即可。
2、因为是本地数据库,所有isReadOnly方法返回false,代表可读可写。
3、在表ofproperty表中,有如下的一条记录:
      provider.vcard.className     org.jivesoftware.openfire.vcard.DefaultVCardProvider
     代表openfire目前在用的VCardProvider是DefaultVCardProvider,如果自己实现的其他的vcard源,可以自己实现一个VCardProvider来替换掉,只需要更改掉该条记录即可。
 
VCardManager extends BasicModule:
1、实现对用户vcard信息的管理,功能有提供基本的vcard增删改查操作、vcard缓存操作、vcard事件管理操作等
2、在该模块进行实例化时(系统启动时),在构造函数中使用CacheFactory.createCache(cacheName)方法创建了vcard缓存,并且订阅了vcard的事件(创建、更新、删除),在事件处理中更新vcard缓存
3、在加载vcard信息的时候,先查询缓存中是否含有该用户的vcard信息,没有的话再查询数据库。并把查询的结果更新到缓存中。
4、调用VCardProvider的相关方法进行vcard的查询和设置vcard信息,并在完成后,使用下面的方法更新缓存激发事件
     更新缓存:
     vcardCache.put(username, newvCard);
 
     分发事件:
      // Dispatch vCard events  
      if (created) {
            // Alert listeners that a new vCard has been created
            VCardEventDispatcher.dispatchVCardCreated(username, newvCard);
        } else if (updated) {
            // Alert listeners that a vCard has been updated
            VCardEventDispatcher.dispatchVCardUpdated(username, newvCard);
        }
5、由于继承了BasicModule类,有如下的处理:
1)实现了initialize方法,通过下面的方法找到配置的相应的provider方法,如果没有,返回默认的provier
          String className = JiveGlobals.getProperty("provider.vcard.className",
                DefaultVCardProvider.class.getName());
2)实现了start方法,在该方法中订阅用户事件
      UserEventDispatcher.addListener(eventHandler);
     在该事件的处理方法中,如果发现用户被删除,则调用方法删除该用户的缓存及vcard。
 
 
org.jivesoftware.openfire.handler.IQvCardHandler
1、用于接受客户端发来的vcard相关请求(获取vcard和设置vcard)
2、handleIQ()方法调用VCardManager的setVCard和getVCard方法来操作vcard信息。
3、在iq=get的时候,判断发来的请求是否需要过滤掉部分vcard字段,不是全部返回给客户端。

本文链接

分享到:
评论

相关推荐

    即时通信openfire功能代码

    在"即时通信openfire功能代码"这个压缩包中,可能包含了实现Openfire各种功能的源代码示例和说明文档。这些代码可能涵盖了用户注册、登录、发送消息、管理聊天室、实现状态更新等功能的实现方法。通过学习和理解这些...

    openfire源代码研究

    #### 一、Openfire源代码目录结构分析 ##### 1. build目录 - **概述**:此目录包含了构建Openfire安装文件所需的资源与配置,例如生成RPM包或其他类型的安装程序时所必需的脚本与文件。 - **内容**:包含JRE(Java...

    Openfire源代码在Eclipse3.5.2中的部署、编译、运行、部署安装

    ### Openfire 源代码在 Eclipse 3.5.2 中的部署、编译、运行与安装 #### 一、准备工作 在开始之前,需要确保已经下载了 Openfire(版本 3.6.4)、Spark(版本 2.5.8)以及 Smack(版本 3.1.0)。由于 Spark 的源码...

    Openfire源代码在Eclipse3.5.2中的部署、编译、运行、配置安装.doc

    《Openfire源代码在Eclipse3.5.2中的部署、编译与运行》 Openfire是一款基于Java的开源即时通讯服务器,它提供了强大的聊天、会议和协作功能。本教程将指导你如何在Eclipse 3.5.2环境下部署、编译、运行并配置...

    openfire相关代码

    这个"openfire相关代码"的压缩包文件可能包含了用于连接、登录和发送消息到Openfire服务器的示例代码。对于初学者,理解并应用这些代码可能会有些挑战,因为它们可能针对特定的场景或者具有一定的复杂性。 在Java中...

    Openfire安装配置手册

    下载Openfire 3.7.0安装文件openfire_3_7_0.exe和源代码openfire_src_3_7_0.zip,解压缩源代码文件夹,包括build、resources、documentation和src四个目录。 * build目录:用于生成安装文件,例如rpm文件 * ...

    Openfire源码分析

    网上的openfire源码分析,整理成了本地文件,方便查看。作者的博客在此:https://www.cnblogs.com/Fordestiny/p/7462745.html

    java android openfire smack项目源码

    同时,源码分析和理解将有助于进一步定制和扩展应用功能,例如添加新的消息类型、实现推送通知、优化性能等。通过这个项目,开发者可以学习到如何集成即时通讯系统到Android应用,以及如何使用Java和Android SDK处理...

    使用openfire登录android

    标题“使用openfire登录android”涉及的技术点主要是集成Openfire服务器和MySQL数据库,以及在Android平台上实现登录功能。Openfire是一款开源的即时通讯(Instant Messaging, IM)服务器,它基于XMPP(Extensible ...

    基于openfire的安卓聊天软件

    【标题】:“基于openfire的安卓聊天软件” 在IT领域,构建实时通信应用是一个常见的需求,尤其是对于移动设备用户。本项目聚焦于基于Openfire的Android聊天软件开发,旨在为用户提供一个可以注册、登录、聊天、...

    Openfire源码部署与开发.doc

    2. **源码下载**: 访问官方网站 [http://www.igniterealtime.org/projects/openfire/](http://www.igniterealtime.org/projects/openfire/) 下载最新版本的Openfire源代码,文档中提到的是3.6.4版本。 #### 三、...

    openfire消息机制和源码分析

    标题中提到的“Openfire消息机制和源码分析”指的是对开源即时通讯服务器Openfire内部消息处理机制的详细探讨和源代码的解读。Openfire是一个基于XMPP(Extensible Messaging and Presence Protocol)协议的服务器端...

    基于xmpp协议的openfire android客户端

    Openfire是一款基于XMPP协议的服务器软件,它提供了高效、安全的实时通讯服务,支持多种平台,包括Android。 在Android平台上开发基于XMPP的Openfire客户端,主要涉及以下几个核心知识点: 1. **XMPP协议理解**:...

    websocket+smack+openfire的的源代码

    开发者可以通过这个源代码学习如何配置 Openfire 服务器,设置 WebSocket 连接,以及如何在客户端应用中使用 Smack API 进行即时通讯功能的开发。此外,源代码还可能包含了错误处理、安全配置、性能优化等方面的实践...

    openfire环境搭建说明

    - **SVN(Subversion)**:一种版本控制系统,用于管理Openfire项目的源代码版本。 #### 二、Openfire源代码获取与项目初始化 - **源代码位置**:通过提供的SVN地址(`...

    openfire的相关资源

    Openfire是一个强大而灵活的即时通讯平台,通过上述资源,你可以学习到如何从零开始搭建Openfire服务器,配置源代码进行二次开发,以及如何解决遇到的报错。对于希望在企业中构建安全、高效沟通系统的开发者来说,...

    openfire二次开发问题分析及解决

    ### Openfire二次开发问题分析及解决 #### 一、引言 随着计算机技术的迅猛发展,开源软件的二次开发利用逐渐成为进行快速开发的主要手段。Openfire作为一款优秀的开源XMPP服务器软件,因其卓越的性能和良好的可...

    openfire 源码 Eclipse部署

    本文将详细介绍如何在Eclipse开发环境中部署Openfire源代码。Openfire是一款基于XMPP协议的即时消息服务器,由Ignite Realtime组织开发并维护。由于其开源、灵活且支持多种设备的特点,在企业级即时通信系统中有广泛...

    Openfire即时消息传输平台 v4.8.0 源码包.zip

    而"Openfire-4.8.0"目录则包含所有源代码文件,开发者可以深入研究其内部工作原理,进行二次开发或定制化修改。 对于计算机科学的学习者,尤其是那些进行毕业设计或论文研究的人,Openfire源码提供了一个了解即时...

Global site tag (gtag.js) - Google Analytics