Lotus Sametime开发入门
- 格式:docx
- 大小:200.38 KB
- 文档页数:23
通常来讲,一个好的平台产品除了自身的强大功能外,还应该是开放的,使得开发人员能够进行二次开发和定制,从而扩展平台的功能。Lotus Sametime作为IBM市场领先的,企业级实时协作的平台,就符合这两个特征:自身具备强大的Instant Messaging和Web Conferencing能力,同时还开放了一系列API给开发人员使用。这些API被组织成多个toolkit开放出来。
从开发人员的角度看,这些toolkit可分为客户端和服务器端。客户端提供与Sametime服务器进行交互的能力,利用它提供的服务和组件,开发人员可以很轻松的把Sametime的相关功能嵌入到自己的应用程序中,比如在线聊天、会议、视频等,甚至开发自己的即时通讯软件。
服务器端toolkit则提供对Sametime服务器进行扩展的API。开发人员可以把自己的应用程序以类似于插件的方式插入Sametime服务器。例如简单的"机器人"程序,向用户提供实时的股票,天气等信息;"离线消息"程序,能够向离线用户发送消息,复杂的应用例如拍卖程序,在线游戏等等。
本篇文章作为Lotus Sametime toolkit开发入门系列的第一篇,将重点介绍客户端java toolkit的使用方法,并带领读者循序渐进的开发出两个简单的Sametime java客户端程序。
Lotus Sametime是IBM市场领先的、企业级实时协作的平台。它具备强大的实时通信,在线会议的功能,全世界每天都有超过1500万人在使用Sametime及相关软件。
Lotus Sametime一个典型的C/S应用。各个客户端都需要登录到服务器并通过服务器发送各种消息。
Sametime toolkit可以从IBM developerWorks Lotus Toolkits页面上下载. 该页面上包括从版本3.1, 6.5.1到7.0的所有服务器端和客户端的toolkit下载链接。
下表列出了客户端toolkit的不同版本: 版本 用途和使用环境 Sametime Java toolkit Toolkit的java版本,提供了全面的服务和组件来方便开发人员进行java应用程序的开发,支持JDK1.1及其以上版本 Sametime C++ toolkit Toolkit的C++版本,定位于Windows 平台,可以被用来开发基于Win32和MFC的Sametime应用程序。
Sametime COM toolkit 该版本提供了Sametime的一些基本功能,以COM接口的方式发布,可在支持COM,OLE的环境中应用
Sametime Links toolkit 该版本用于Web 应用程序,通过HTML/JavaScript使得Web页面获得Sametime的相关功能。
注:本文以Java toolkit为例来介绍其使用方法,下文中如果没有特殊说明,当提到toolkit时,均是指Java toolkit。
"分层"在软件系统中是个非常有效的解决问题的方法,Sametime java toolkit也划分为3个层次:UI Layer, Server Layer, Transport Layer。他们之间的关系如下图所示:
1.传输层(Transport Layer): 位于体系结构的最底层,负责处理和Sametime服务器的通信。开发人员不必关心这一层。
2.服务层(Service Layer): 如下图所示,这一层提供了两大类服务:Community类服务和Meeting类服务,每一类服务都包含了多个具体的服务(Service)。本文将着重介绍这些服务的使用方法。 Community类服务中的较常用服务包括: Community服务: 这是最核心,最基本的一个服务,用户通过该服务来登录Sametime服务器。 Buddy List服务: 该服务使得开发人员能轻松的读取/设置一个用户的"联系人列表",而不需要处理复杂的底层协议。 Instant Message服务: 主要用来发送/接受各种实时的消息,消息可以是文本或二进制数据。 Places服务: 该服务允许用户创建虚拟的空间(Place),并且可以在其中进行协作。
Meeting类服务中常用服务有: Application Sharing服务: 在虚拟的Place中,多个用户可以共享一个应用程序,该服务提供了一些UI组件来显示应用程序。 WhiteBoard服务: 通过该服务和相关的UI组件,开发人员能够创建虚拟的白板,用户可以画线、方框、圆等基本图形。
3.UI层: 位于toolkit体系的最上层,它提供了多种UI组件方便程序员开发,例如:只需要简单的调用Chat UI的几个方法,就能提供一个简单的聊天界面。使用UI层的API可以极大的简化程序员的开发工作。
限于篇幅,本文不可能涉及的介绍客户端toolkit中的所有服务。本文将随着介绍客户端toolkit中的最重要服务带领读者完成一个简单的登录聊天的应用程序(STClient)。有兴趣的读者可以自行阅读本文列举的参考资料和客户端toolkit自带的其他示例程序。 开发完成后,读者可以通过此示例程序完成如下功能: 登录到Sametime服务器 查找用户 与指定用户一对一聊天 多用户共享桌面
该程序界面如下图所示:
为了便于读者理解,本文中的代码只是从程序中摘取的一些片断并做了少许修改,完整的代码可以在参考资料中下载。
Community类服务 1. Community服务(CommunityService): 登录Sametime服务器 STClient 程序要做的第一步就是登录到Sametime服务器, 这就需要使用toolkit中最基本的一个服务CommunityService,通过它才能登录到Sametime 服务器。另外该服务还可以接收管理员消息,改变用户状态和隐私设置。使用该服务登录到Sametime需要下面几个步骤
步骤一:创建Session对象 session = new STSession("STClient Session" + this); session.loadSemanticComponents(); session.start();
上面的代码片断首先创建一个STSession 对象,通过它才能装入Sametime的所有服务,在本例中根据我们的需求使用了loadSemanticComponents()方法,toolkit也提供了其他方法来装载特定的服务,请参考相关文档。在STSession使用之前,我们必须调用它的start()方法。
步骤二:,获得Community服务对象并登录 我们需要通过session对象获得CommunityService的引用并使用loginByPassword()方法登录。注意所有的Sametime的组件都有COMP_NAME属性。
comm = (CommunityService) session.getCompApi(CommunityService.COMP_NAME); comm.loginByPassword(host, user, pwd);
loginByPassword的三个参数分别是sametime server 地址,用户名和密码 步骤三:实现LoginListener 因为Sametime是在网络上运行的程序,所以登录过程可能需要一定时间。我们不希望程序一直等待登录成功的确认,所以我们需要实现Listener接口让Community服务在登录成功后通知程序。因此我们需要为Community服务对象绑定LoginListener并实现LoginListener接口的两个方法:loggedIn()和loggedOut()。
首先在调用loginByPassword()方法前增加语句 comm.addLoginListener(new LoginHandler());
然后在LoginHandler类中实现LoginListener接口。 public class LoginHandler implements LoginListener{ public void loggedIn(LoginEvent event) { System.out.println("Login successful"); } public void loggedOut(LoginEvent event) { System.out.println("Logout successful"); } }
步骤四:注销 最后,不要忘记,在程序关闭时,必须要关闭并注销所有Sametime对象。 public void windowClosing (WindowEvent e) { comm.logout(); session.stop(); session.unloadSession(); }
通过以上这四步,我们可以看到Sametime中基本的设计模式:观察者模式(Observer pattern)。在客户端向服务器发出请求之前(比如Login),先创建一个观察者(如LoginListner的实现类),把它加入到适当的组件中去。这样请求完成以后,观察者的相关方法会被调用(如loggedIn()方法),对结果(比如登录是否成功)进行处理。观察者模式在对Sametime的编程中几乎无处不在,下文中会有更多的示例。
本小节详细的代码参见示例程序STClient类。 2. Lookup服务(LookupService):查找用户 登录到系统以后,在向任何一个用户发送消息之前,我们先要获得这个用户的引用。在Sametime toolkit中,用户(User)模型非常重要。简单的来讲,该模型包括静态的User和动态的User, 静态User代表Sametime community中的一个实体,在toolkit中与之对应的是STUser类。一旦用户登录到系统中以后,就产生了一个动态的User, 可用STUserInstance来表示。如果一个用户登录多次,就会产生多个不同的STUserInstance对象。在这里我们只需要获得STUser对象的引用。
步骤一:获得LookupService对象