国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

JAVA中即時(shí)通訊內(nèi)容擴(kuò)展研究

2016-01-05 12:00:45徐曙民張偉??
軟件導(dǎo)刊 2015年12期
關(guān)鍵詞:嵌入插件自動(dòng)化

徐曙民++張偉??

摘 要:針對目前市場中即時(shí)通信軟件不能提供矢量圖形、圖表、公式等信息編輯功能的問題,闡述了以插件方式在即時(shí)通信軟件聊天框中嵌入Word的優(yōu)點(diǎn),研究了嵌入及自動(dòng)化操作方法,設(shè)計(jì)并實(shí)現(xiàn)了一款基于聊天軟件Spark的擴(kuò)展插件。該擴(kuò)展插件能夠在不影響通信系統(tǒng)基本功能的前提下,為即時(shí)通信軟件Spark提供特殊信息的即時(shí)編輯修改功能。

關(guān)鍵詞:JAVA;即時(shí)通信;嵌入;自動(dòng)化;插件

DOIDOI:10.11907/rjdk.1511055

中圖分類號:TP303

文獻(xiàn)標(biāo)識碼:A 文章編號文章編號:16727800(2015)012000104

基金項(xiàng)目基金項(xiàng)目:中鐵四局遠(yuǎn)程教育平臺項(xiàng)目(20140912)

作者簡介作者簡介:徐曙民(1990-),男,湖南長沙人,中南大學(xué)軟件學(xué)院碩士研究生,研究方向?yàn)榧磿r(shí)通訊、網(wǎng)絡(luò)技術(shù);張偉(1972-),男,黑龍江哈爾濱人,博士,中南大學(xué)信息科學(xué)與工程學(xué)院講師、碩士生導(dǎo)師,研究方向?yàn)檐浖こ?、大?shù)據(jù)及知識工程、模式識別。

0 引言

當(dāng)前市場中騰訊QQ、MSN等即時(shí)聊天軟件以其良好的交互界面、客戶體驗(yàn)和不斷完善、創(chuàng)新、增強(qiáng)的服務(wù)功能備受廣大用戶歡迎。此類聊天軟件的設(shè)計(jì)初衷是為普通用戶提供日常通訊需求,通信軟件中的魔法表情、視頻通信、語音通信等功能,豐富了用戶的通信方式。

然而,隨著信息時(shí)代專業(yè)分工日趨深化,此類即時(shí)通訊軟件卻不能提供專業(yè)化數(shù)據(jù)即時(shí)輸入和修改功能。例如,許多大型企業(yè)在資金核算或人事調(diào)整時(shí),需要很多圖形、圖表數(shù)據(jù)描述企業(yè)實(shí)時(shí)資金或人事狀況,而現(xiàn)時(shí)卻只能以圖片的形式發(fā)送此類信息。

隨著高等院校教學(xué)科研工作的深入開展,學(xué)生在實(shí)驗(yàn)、課程設(shè)計(jì)等教學(xué)科研活動(dòng)中需要用到的信息也日趨復(fù)雜,目前的即時(shí)通訊軟件很難滿足此類信息的即時(shí)修改和輸入功能。例如,數(shù)學(xué)公式、化學(xué)公式、物理公式作為描述事物內(nèi)部和外部關(guān)系的一種表達(dá)方法,在現(xiàn)代科技中具有不可替代的作用,但此類信息卻不能即時(shí)修改和輸入。

本文提出一種將Word嵌入即時(shí)通信軟件聊天框的方式,在即時(shí)通信過程中將圖形、圖表等信息以XML的形式發(fā)送和顯示,使用戶可以在聊天框中即時(shí)編輯以上內(nèi)容。考慮到市場中絕大多數(shù)開源即時(shí)通信軟件使用JAVA語言的因素,文中采用SWT圖形庫與ActiveX控件結(jié)合的方法,開發(fā)人員可以在不影響即時(shí)通信軟件基本功能的前提下以插件的方式嵌入到該軟件中。

1 聊天信息顯示容器

市場中對于二維矢量圖形、數(shù)學(xué)符號和公式這些復(fù)雜的信息內(nèi)容,一般采用SVG(Scalable Vector Graphics)、MathML(Mathematical Markup Language)這些基于XML標(biāo)準(zhǔn)的擴(kuò)展標(biāo)記語言描述[12]。由于擴(kuò)展語言的標(biāo)準(zhǔn)不同,所以這些信息的容器僅支持單一類型信息的顯示與編輯,例如MathType、MathMagic等編輯器僅支持MathML描述的公式顯示與編輯, Cairo、Graphviz等編輯器僅支持SVG描述的矢量圖形修改。

2007 Microsoft Office system中采用的Office Open XML格式,使用ZIP和壓縮技術(shù)來存儲(chǔ)文檔,支持多種XML標(biāo)準(zhǔn)的擴(kuò)展標(biāo)記語言,為SVG、MathML等語言描述的信息提供了一個(gè)良好的顯示和修改容器,所以僅需將Office應(yīng)用程序嵌入即時(shí)通信軟件聊天框,即可實(shí)現(xiàn)顯示和修改此類信息的需求。

2 顯示容器嵌入

Office本身不支持作為即插即用對象嵌入其它應(yīng)用程序,需要采用系統(tǒng)原生外殼包裹。SWT(Standard Widget Toolkit)作為IBM開發(fā)的一套用于Java的圖形用戶界面系統(tǒng)[3],采用如下思想創(chuàng)建組件:在系統(tǒng)組件存在的情況下,采用系統(tǒng)原生組件,在系統(tǒng)組件不存在的情況下,創(chuàng)建模擬組件。

如圖1所示,系統(tǒng)提供原生組件包裹Word,SWT在原生組件上覆蓋了一層JNI映射,所有操作系統(tǒng)的API調(diào)用將會(huì)映射到這個(gè)JNI調(diào)用上,JNI 封裝部分SWT的C代碼部分, JNI Wrapper部分只是各平臺GUI API的JNI簡單映射,SWT通過Java Peer填平了各平臺差異,從而給Application提供統(tǒng)一的SWT API接口。例如本文中,Application采用SWT API提供的OleFrame作為OLE嵌入的頂層框架,OleClientSite作為包裹Word和Activex的容器。

圖1 SWT底層結(jié)構(gòu)

3 客戶端中自動(dòng)化技術(shù)應(yīng)用

在客戶端接收與發(fā)送消息時(shí),需要將后臺中的信息在嵌入了Word的聊天框中顯示出來,此時(shí)通過自動(dòng)化技術(shù),在程序與COM組件之間建立一個(gè)連接,實(shí)現(xiàn)組件間的直接調(diào)用與數(shù)據(jù)交換。在此過程中,自動(dòng)化程序作為一種實(shí)現(xiàn)了IDispatch接口的COM組件,響應(yīng)應(yīng)用程序請求,承擔(dān)類似自動(dòng)化服務(wù)器的功能[4]。

3.1 JACOB與dom4j

JACOB編寫了操作COM組件的Java類[5],并利用JNI技術(shù)將自動(dòng)化接口相關(guān)的函數(shù)調(diào)用聲明為本地的方法。利用C++實(shí)現(xiàn)了與WIN32平臺下COM組件的溝通。將C++編寫的程序編譯為“Jacob.dll”庫文件,與Java類包整合起來,完成了Java程序與COM組件的連接通路。雖然JACOB完成了Java與COM組件的橋接,但卻無法獲得SWT中Word的IDispatch值,無法對嵌入后的Word進(jìn)一步操作。

dom4j是一個(gè)用來讀寫XML文件的Java API。由于2007 Microsoft Office system中采用Office Open XML格式來存儲(chǔ)信息,所以利用dom4j對Word進(jìn)行操作也是一種可行的方式。但是Java語言的平臺無關(guān)性使它與本機(jī)的內(nèi)部聯(lián)系很少,尤其是在軟件復(fù)用方面。在dom4j中表現(xiàn)為需要將Word關(guān)閉后方能對其操作,采用此種方法對Word操作時(shí)會(huì)造成聊天顯示框短暫性關(guān)閉,用戶體驗(yàn)不好。

3.2 ActiveX in SWT

由于SWT采用原生組件的特性,使得SWT在Windows中對ActiveX調(diào)用有一定優(yōu)勢。同時(shí)SWT封裝了Windows內(nèi)大部分的Win32 API,所以在Word嵌入SWT后,可以將ProgramID值Word.Document傳給OleClientSite并掛載到指定的composite引用上。OLE Automation通過構(gòu)造函數(shù)獲取OleClientSite中Word原生對象引用指針[6]。通過OLE Automation提供的函數(shù)getIDsOfNames獲得Office 的Application、Documents對象或EndKey、Unit等相對于IDispatch接口的ID值,將執(zhí)行指令所需參數(shù)和屬性通過通用類型包裝器Variant轉(zhuǎn)換為Variant類型,最后通過invoke函數(shù)執(zhí)行指令,實(shí)現(xiàn)通過Java語言對Word的自動(dòng)化操作。

4 傳輸消息優(yōu)化

采用XMPP協(xié)議的即時(shí)通信系統(tǒng)傳輸數(shù)據(jù),基本模式是先通過stream標(biāo)簽建立一個(gè)XML流,將需要傳輸?shù)男畔⑶度雖essage或者body等XML元素中,組成XML節(jié),服務(wù)器再根據(jù)客戶端發(fā)送的信息以及程序邏輯發(fā)送XML節(jié)。由于XML命名空間提供避免元素命名沖突的特性,所以可在XMPP協(xié)議的基礎(chǔ)上通過定制化功能傳輸所需內(nèi)容。

待發(fā)送的信息可以通過兩種方式發(fā)送:docx文件格式、xml文件格式。Word 2007提供了一種新的文件格式——Microsoft Office Word XML,該格式由一個(gè)壓縮的ZIP包組成,稱為包[7]。Word將包的內(nèi)容分成許多邏輯部件,每個(gè)部件存儲(chǔ)一個(gè)特定的文檔。Document.xml作為主要的文檔信息存儲(chǔ),是Word XML格式中唯一需要的部件。[Content_Types].xml作為描述出現(xiàn)在文件中的每個(gè)類型文件,與.rels描述文件關(guān)系的文件也是相當(dāng)重要的,所以在傳輸過程中僅提取這3種文件發(fā)送。接收方獲取后,通過ZIP工具將所有內(nèi)容重新按照模塊化結(jié)構(gòu)打包為ZIP文檔,最后保存為docx文件格式即可。此種傳輸方法可大大減小所需發(fā)送文件的尺寸,減少傳輸中的帶寬及時(shí)延。

5 軟件開發(fā)實(shí)例

中鐵四局遠(yuǎn)程教育平臺項(xiàng)目,使用Java作為應(yīng)用層的語言工具。其中,某個(gè)功能便是將Word以插件的形式嵌入即時(shí)通訊系統(tǒng)的聊天框中?,F(xiàn)在以此為例講解Java中即時(shí)通信軟件通過插件方式在聊天框中嵌入Word的方法。

5.1 通信系統(tǒng)總體結(jié)構(gòu)

通信系統(tǒng)主要組件包括:實(shí)時(shí)服務(wù)器Openfire、XMPP協(xié)議及其實(shí)現(xiàn)類庫Smack、客戶端Spark及其擴(kuò)展插件SparkPlugin。Openfire 是遵從 GPL 協(xié)議的開源軟件,是用Java開發(fā)的實(shí)時(shí)協(xié)作服務(wù)器[8]。Smack是一個(gè)XMPP 可擴(kuò)展消息處理現(xiàn)場協(xié)議的Java 實(shí)現(xiàn)[9],提供一套可擴(kuò)展的API??蛻舳送ㄟ^Smack與實(shí)時(shí)服務(wù)器Openfire通信,獲取用戶之間通信所需要的連接信息,系統(tǒng)結(jié)構(gòu)如圖2所示。

5.2 插件的主要類及功能

插件入口類:繼承并實(shí)現(xiàn)了Spark API提供的Plugin接口, 該接口定義了插件的邏輯實(shí)體。在實(shí)例化靜態(tài)管理類SparkManager后通過重寫Plugin的initialize方法,將傳輸所需的JID、客戶端版本號等信息傳遞給消息收發(fā)類。

圖2 通信系統(tǒng)總體結(jié)構(gòu)

圖形界面類:在該類中利用SWT提供的OleFrame作為頂層框架,OleClientSite作為Word容器,將Word嵌入聊天顯示框中。通過JAVA語言對Activex控件Word.Document的控制,實(shí)現(xiàn)Word的自動(dòng)化操作功能,使得消息能夠自動(dòng)顯示在嵌入了Word的聊天顯示框中。

消息收發(fā)類:此類為線程在插件入口類初始化時(shí)執(zhí)行,通過插件入口類中提供的連接信息connection初始化FileTransferManager等管理器類,在接收或發(fā)送文件請求時(shí)添加一個(gè)監(jiān)聽匿名內(nèi)部類,通過重寫該接口中request方法接收文件或者消息。

歷史消息管理類:利用Java7 NIO2文件系統(tǒng)的相關(guān)事件處理API,創(chuàng)建 WatchService 實(shí)例,同時(shí)為需要監(jiān)視的目錄創(chuàng)建一個(gè)Path類對象,調(diào)用Path對象的register()方法。當(dāng)接收方接收消息包后,創(chuàng)建、修改歷史消息文件目錄。當(dāng)這類事件發(fā)生后會(huì)觸發(fā)WatchService返回相關(guān)類WatchKey,以此執(zhí)行一系列的WatchEvent,比如調(diào)用圖形界面類中的顯示方法,將接收消息顯示在聊天框中。

5.3 插件與Spark的無縫集成

Spark 作為一個(gè)開源的、 跨平臺的即時(shí)通訊客戶端軟件[10],提出了一種很好的插件框架。

創(chuàng)建工程時(shí),需將sparkplug解壓出來的builder、spark文件夾拷貝到項(xiàng)目目錄下,提供插件所需的庫文件和配置文件。同時(shí)需要通過builder中的插件描述文件plugin.xml描述自身的基本屬性,比如版本號、插件ID、作者、插件入口等信息。插件加載過程中,插件管理器會(huì)根據(jù)plugin.xml中描述的依賴關(guān)系選擇插件加載順序。插件開發(fā)完成后僅需通過Ant打包為JAR壓縮文件形式,拖放到Spark客戶端安裝插件目錄中,Spark啟動(dòng)時(shí)會(huì)加載共享的PluginFrameWork插件管理器,完成插件加載。

本項(xiàng)目通過ChatRoom對象獲取權(quán)限,在聊天框中嵌入包裹著Word的SWT組件,同時(shí)通過SparkManager靜態(tài)中控管理類,生成SessionManager、UserManger等管理器,賦予插件對于當(dāng)前會(huì)話信息、用戶信息的處理能力,使Word作為插件嵌入Spark聊天框后,獲得Spark發(fā)送和接收消息的能力。

5.4 插件工作流程

在通信過程中,用戶輸入消息并點(diǎn)擊發(fā)送按鈕時(shí)會(huì)觸發(fā)插件監(jiān)聽,將輸入信息打包為XML格式信息包或者docx格式文檔保存。通過SparkAPI提供的SessionManager獲取發(fā)送信息所需的XMPP全局標(biāo)示符JID,客戶端與實(shí)時(shí)服務(wù)器的連接引用connection以后發(fā)送消息。

接收方的歷史消息管理類監(jiān)聽到消息記錄文件夾中信息的改變,調(diào)用圖形界面類中的OLE automation方法,將接收到的信息自動(dòng)顯示在接收方界面,消息發(fā)送過程如圖3所示。

圖3 消息發(fā)送過程

當(dāng)發(fā)送方與多個(gè)好友進(jìn)行會(huì)話,若某個(gè)接收方?jīng)]有加載插件,發(fā)送方可以通過發(fā)送圖片的方式,將信息顯示在會(huì)話方界面,過程如圖4、圖5所示。

圖4 消息發(fā)送流程

5.5 插件效果分析

測試平臺由一臺服務(wù)器(Intel Core i5 1.90GHz 8.00GB Windows 8.1)和兩臺客戶機(jī)(Intel Core i5 1.90GHz 8.00GB Windows 8.1)組成。3臺測試機(jī)位于同一局域網(wǎng)內(nèi)不同網(wǎng)段,網(wǎng)絡(luò)帶寬為100Mbps。

在輸入框和顯示框,通過SWT嵌入了Word作為信息顯示容器,能夠很好地承擔(dān)圖表、公式、流程圖等信息的顯示和編輯工作。插件點(diǎn)擊發(fā)送按鈕或者接收到消息包之后,將觸發(fā)OLE自動(dòng)化操作,相對于利用dom4j等技術(shù)對Word的后臺操作,無需關(guān)閉Word,對信息的處理速度快,消息從接收到顯示處理時(shí)延為200ms左右,保證了插件使用時(shí)用戶的體驗(yàn)感。

圖5 消息接收流程

6 結(jié)語

針對企業(yè)和學(xué)校等機(jī)構(gòu)在生產(chǎn)設(shè)計(jì)、人事資金調(diào)整、

教學(xué)科研等活動(dòng)需要矢量圖形、圖表、公式等信息的即時(shí)通信需求,詳細(xì)闡述和分析了在聊天框中嵌入Word的方法,并配合Spark實(shí)例加以說明,突出顯示了以插件將Word嵌入聊天框的方式,可以在不影響即時(shí)通訊軟件基本功能的前提下,解決用戶間無法進(jìn)行專業(yè)化信息交流的問題,這也是本文的創(chuàng)新之處。

參考文獻(xiàn)參考文獻(xiàn):

[1] QUINT A. Scalable vector graphics[J]. IEEE MultiMedia,2003,3(3):99102.

[2] LANDAU R H, VENDINER D, WATTANAKASIWICH P. Future scientific digital documents with MathML, XML, and SVG[J]. Computing in Science & Engineering, 2002,4(2):7785.

[3] 薛笛.SWT全接觸[EB/OL]. http://www.ibm.com/developerworks/cn/opensource/osswt/.

[4] 李瑞.JAVA中基于JACOB的COM組件調(diào)用研究[J]. 微計(jì)算機(jī)信息,2007,24(5):168170.

[5] 馮正全.COM原理概述[J].成都信息工程學(xué)院學(xué)報(bào),2004,19(3):398402.

[6] VERONKIA IRVINE . ActiveX support in SWT[EB/OL].http://www.eclipse.org/articles/ArticleActivexSupportInSwt/index.html.

[7] ERIKA RHRLI .Walkthrough: Word 2007 XML [EB/OL].http://www.microsoft.com/china/msdn/library/office/office/Word2007XMLFormat.mspx?mfr=true.

[8] DAVE CRIDLAND .Ignite realtime: openfire server[EB/OL].http://www.igniterealtime.org/projects/openfire/index.jsp.

[9] FLOW .Ignite realtime:smack API [EB/OL].http://www.igniterealtime.org/projects/smack/.

[10] 張彥,夏清國.Jabber/XMPP技術(shù)的研究與應(yīng)用[J].科學(xué)技術(shù)與工程,2007,7(6):10331035.

(責(zé)任編輯:杜能鋼)

猜你喜歡
嵌入插件自動(dòng)化
自編插件完善App Inventor與樂高機(jī)器人通信
電子制作(2019年22期)2020-01-14 03:16:34
創(chuàng)新型人才培養(yǎng)中的文化素質(zhì)教育嵌入研究
成才之路(2016年31期)2016-11-19 16:01:51
供熱站自動(dòng)控制系統(tǒng)中PLC的應(yīng)用
AGV小車在白酒行業(yè)自動(dòng)化立體倉庫中的應(yīng)用
中國市場(2016年36期)2016-10-19 03:40:15
配電室無人職守集控站在京博石化的運(yùn)用
科技視界(2016年20期)2016-09-29 14:13:02
配電線路運(yùn)行資料管理自動(dòng)化的探討
科技視界(2016年20期)2016-09-29 13:45:10
小微企業(yè)全球價(jià)值鏈嵌入模式研究述評與展望
醫(yī)技預(yù)約系統(tǒng)的設(shè)計(jì)與研究
MapWindowGIS插件機(jī)制及應(yīng)用
基于Revit MEP的插件制作探討
隆子县| 唐海县| 阿拉善盟| 利津县| 正镶白旗| 祁连县| 丽水市| 白玉县| 赤城县| 武鸣县| 黔西| 海门市| 双峰县| 昆明市| 西乌珠穆沁旗| 定兴县| 蛟河市| 海盐县| 辽宁省| 山西省| 尉犁县| 宜兰县| 天等县| 呈贡县| 福州市| 墨江| 清流县| 阿勒泰市| 滁州市| 庄浪县| 虹口区| 砚山县| 怀安县| 蕲春县| 日喀则市| 林口县| 荆门市| 西林县| 崇左市| 韶关市| 咸丰县|