Lotus Sametime开发入门

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

通常来讲,一个好的平台产品除了自身的强大功能外,还应该是开放的,使得开发人员能够进行二次开发和定制,从而扩展平台的功能。LotusSametime作为IBM市场领先的,企业级实时协作的平台,就符合这两个特征:自身具备强大的InstantMessaging和WebConferencing能力,同时还开放了一系列API给开发人员使用。这些API被组织成多个toolkit开放出来。从开发人员的角度看,这些toolkit可分为客户端和服务器端。客户端提供与Sametime服务器进行交互的能力,利用它提供的服务和组件,开发人员可以很轻松的把Sametime的相关功能嵌入到自己的应用程序中,比如在线聊天、会议、视频等,甚至开发自己的即时通讯软件。服务器端toolkit则提供对Sametime服务器进行扩展的API。开发人员可以把自己的应用程序以类似于插件的方式插入Sametime服务器。例如简单的机器人程序,向用户提供实时的股票,天气等信息;离线消息程序,能够向离线用户发送消息,复杂的应用例如拍卖程序,在线游戏等等。本篇文章作为LotusSametimetoolkit开发入门系列的第一篇,将重点介绍客户端javatoolkit的使用方法,并带领读者循序渐进的开发出两个简单的Sametimejava客户端程序。LotusSametime是IBM市场领先的、企业级实时协作的平台。它具备强大的实时通信,在线会议的功能,全世界每天都有超过1500万人在使用Sametime及相关软件。LotusSametime一个典型的C/S应用。各个客户端都需要登录到服务器并通过服务器发送各种消息。Sametimetoolkit可以从IBMdeveloperWorksLotusToolkits页面上下载.该页面上包括从版本3.1,6.5.1到7.0的所有服务器端和客户端的toolkit下载链接。下表列出了客户端toolkit的不同版本:版本用途和使用环境SametimeJavaToolkit的java版本,提供了全面的服务和组件来方便开发人员进行javatoolkit应用程序的开发,支持JDK1.1及其以上版本SametimeC++toolkitToolkit的C++版本,定位于Windows平台,可以被用来开发基于Win32和MFC的Sametime应用程序。SametimeCOMtoolkit该版本提供了Sametime的一些基本功能,以COM接口的方式发布,可在支持COM,OLE的环境中应用SametimeLinkstoolkit该版本用于Web应用程序,通过HTML/JavaScript使得Web页面获得Sametime的相关功能。注:本文以Javatoolkit为例来介绍其使用方法,下文中如果没有特殊说明,当提到toolkit时,均是指Javatoolkit。分层在软件系统中是个非常有效的解决问题的方法,Sametimejavatoolkit也划分为3个层次:UILayer,ServerLayer,TransportLayer。他们之间的关系如下图所示:1.传输层(TransportLayer):位于体系结构的最底层,负责处理和Sametime服务器的通信。开发人员不必关心这一层。2.服务层(ServiceLayer):如下图所示,这一层提供了两大类服务:Community类服务和Meeting类服务,每一类服务都包含了多个具体的服务(Service)。本文将着重介绍这些服务的使用方法。Community类服务中的较常用服务包括:Community服务:这是最核心,最基本的一个服务,用户通过该服务来登录Sametime服务器。BuddyList服务:该服务使得开发人员能轻松的读取/设置一个用户的联系人列表,而不需要处理复杂的底层协议。InstantMessage服务:主要用来发送/接受各种实时的消息,消息可以是文本或二进制数据。Places服务:该服务允许用户创建虚拟的空间(Place),并且可以在其中进行协作。Meeting类服务中常用服务有:ApplicationSharing服务:在虚拟的Place中,多个用户可以共享一个应用程序,该服务提供了一些UI组件来显示应用程序。WhiteBoard服务:通过该服务和相关的UI组件,开发人员能够创建虚拟的白板,用户可以画线、方框、圆等基本图形。3.UI层:位于toolkit体系的最上层,它提供了多种UI组件方便程序员开发,例如:只需要简单的调用ChatUI的几个方法,就能提供一个简单的聊天界面。使用UI层的API可以极大的简化程序员的开发工作。限于篇幅,本文不可能涉及的介绍客户端toolkit中的所有服务。本文将随着介绍客户端toolkit中的最重要服务带领读者完成一个简单的登录聊天的应用程序(STClient)。有兴趣的读者可以自行阅读本文列举的参考资料和客户端toolkit自带的其他示例程序。开发完成后,读者可以通过此示例程序完成如下功能:登录到Sametime服务器查找用户与指定用户一对一聊天多用户共享桌面该程序界面如下图所示:为了便于读者理解,本文中的代码只是从程序中摘取的一些片断并做了少许修改,完整的代码可以在参考资料中下载。Community类服务1.Community服务(CommunityService):登录Sametime服务器STClient程序要做的第一步就是登录到Sametime服务器,这就需要使用toolkit中最基本的一个服务CommunityService,通过它才能登录到Sametime服务器。另外该服务还可以接收管理员消息,改变用户状态和隐私设置。使用该服务登录到Sametime需要下面几个步骤步骤一:创建Session对象session=newSTSession(STClientSession+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的三个参数分别是sametimeserver地址,用户名和密码步骤三:实现LoginListener因为Sametime是在网络上运行的程序,所以登录过程可能需要一定时间。我们不希望程序一直等待登录成功的确认,所以我们需要实现Listener接口让Community服务在登录成功后通知程序。因此我们需要为Community服务对象绑定LoginListener并实现LoginListener接口的两个方法:loggedIn()和loggedOut()。首先在调用loginByPassword()方法前增加语句comm.addLoginListener(newLoginHandler());然后在LoginHandler类中实现LoginListener接口。publicclassLoginHandlerimplementsLoginListener{publicvoidloggedIn(LoginEventevent){System.out.println(Loginsuccessful);}publicvoidloggedOut(LoginEventevent){System.out.println(Logoutsuccessful);}}步骤四:注销最后,不要忘记,在程序关闭时,必须要关闭并注销所有Sametime对象。publicvoidwindowClosing(WindowEvente){comm.logout();session.stop();session.unloadSession();}通过以上这四步,我们可以看到Sametime中基本的设计模式:观察者模式(Observerpattern)。在客户端向服务器发出请求之前(比如Login),先创建一个观察者(如LoginListner的实现类),把它加入到适当的组件中去。这样请求完成以后,观察者的相关方法会被调用(如loggedIn()方法),对结果(比如登录是否成功)进行处理。观察者模式在对Sametime的编程中几乎无处不在,下文中会有更多的示例。本小节详细的代码参见示例程序STClient类。2.Lookup服务(LookupService):查找用户登录到系统以后,在向任何一个用户发送消息之前,我们先要获得这个用户的引用。在Sametimetoolkit中,用户(User)模型非常重要。简单的来讲,该模型包括静态的User和动态的User,静态User代表Sametimecommunity中的一个实体,在toolkit中与之对应的是STUser类。一旦用户登录到系统中以后,就产生了一个动态的User,可用STUserInstance来表示。如果一个用户登录多次,就会产生多个不同的STUserInstance对象。在这里我们只需要获得STUser对象的引用。步骤一:获得LookupService对象同获得CommunityService对象相似,我们通过调用STSession的getCompApi方法,传入LookupService的COMP_NAME属性,并通过强制类型转换获得LookupService的引用。LookupServicelookup=(LookupService)session.getCompApi(LookupService.COMP_NAME)步骤二:解析用户解析用户需要使用Resolver类。我们首先用LookupService对象创建Resolver类,然后使用该类的resolve()方法解析指定用户。Resolverresolver=lookup.createResolver(false,//返回所有匹配false,//非穷尽搜索true,//返回搜索到的用户false);//不返回搜索到的组resolver.resolve(userNames);步骤三:实现ResolveListener同样,由于在网络上解析用户需要一定时间,我们使用观察者模式接收解析结果消息。这里需要实现ResolveListener接口和它的三个方法。首先在调用resolve()方法前增加语句:resolver.addResolveListener(newResolveHandler());然后在ResolveHandler中实现ResolveListener接口。如果解析成功,resolved()方法将会被调用。在本例中,如果解析失败或解析到多个用户,我们不作任何处理。publicclassResolveHandlerResolveListener{privateSTUserstUser=null;publicvoidresolved(ResolveEventevent){stUser=event.getResolved();}publicvoidresolveConflict(ResolveEventevent){}publicvoidresolveFailed(ResolveEventevent){}}本小节详细的代码参见示例程序AddUserDialog类。3.InstantMessaging

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功