專利名稱:一種在b/s架構(gòu)下通過(guò)lua腳本控制本地資源的方法
一種在B/S架構(gòu)下通過(guò)LUA腳本控制本地資源的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于具有嵌入式WAP瀏覽器功能的終端產(chǎn)品,具體是指一種在B/S架構(gòu)下 通過(guò)LUA腳本控制本地資源的方法。
背景技術(shù):
終端產(chǎn)品在功能上除了具有普通的通訊功能外,還可能根據(jù)產(chǎn)品的應(yīng)用行業(yè)的業(yè) 務(wù)需要,定制了不同的應(yīng)用程序來(lái)完成行業(yè)中的一些應(yīng)用要求,傳統(tǒng)的做法是1.采用C/S架構(gòu)設(shè)計(jì),客戶端應(yīng)用程序完成絕大部分業(yè)務(wù)邏輯,在有需要時(shí)與服 務(wù)端程序進(jìn)行數(shù)據(jù)交互,客戶端應(yīng)用程序?qū)Ρ镜刭Y源具有控制權(quán)。2.采用B/S架構(gòu)設(shè)計(jì),客戶端運(yùn)行瀏覽器并連接至服務(wù)器,大部分業(yè)務(wù)邏輯和數(shù) 據(jù)都由服務(wù)器傳至本地運(yùn)行。但瀏覽器不具備對(duì)本地資源的控制能力,與本地資源相關(guān)的 業(yè)務(wù)邏輯在這種架構(gòu)下難以實(shí)現(xiàn)。這兩種方式各有優(yōu)缺點(diǎn),B/S架構(gòu)下的客戶端瀏覽器在處理本地資源的能力上 較弱,特別是一些可配置的外設(shè),例如掃描槍、打印機(jī)、讀卡器等。如果瀏覽器需要和這些 外設(shè)進(jìn)行交互,一定需要擴(kuò)展腳本處理的能力。目前瀏覽器當(dāng)中內(nèi)嵌的腳本語(yǔ)言一般為 javascript,而本地資源提供的驅(qū)動(dòng)接口 一般為C函數(shù)庫(kù),javascript不能直接調(diào)用C函數(shù)庫(kù)。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種在B/S架構(gòu)下通過(guò)LUA腳本控制本地資 源的方法,采用LUA取代javascript作為瀏覽器的嵌入式腳本解析器,使瀏覽器對(duì)本地資 源的訪問(wèn)變得容易。本發(fā)明采用以下技術(shù)方案解決上述技術(shù)問(wèn)題一種在B/S架構(gòu)下通過(guò)LUA腳本控制本地資源的方法,包括根據(jù)實(shí)際業(yè)務(wù)的需 求在網(wǎng)頁(yè)腳本中嵌入LUA腳本,當(dāng)終端嵌入式TOB瀏覽器下載解析該頁(yè)面時(shí)就會(huì)提取其中 的LUA腳本,立刻或者是在某個(gè)用戶輸入事件時(shí)調(diào)用虛擬機(jī)執(zhí)行相應(yīng)的LUA腳本;對(duì)TOB瀏 覽器做修改,使其具備從網(wǎng)頁(yè)腳本中提取LUA腳本和在觸發(fā)某個(gè)事件時(shí)執(zhí)行相應(yīng)腳本的能 力。還包括如果瀏覽器需要獲取LUA腳本的執(zhí)行結(jié)果時(shí),就需要LUA腳本把執(zhí)行結(jié)果 通過(guò)IPC機(jī)制反饋給瀏覽器,瀏覽器再顯示在相應(yīng)的控件上。所述WEB瀏覽器和LUA腳本之間采用UDP的方式進(jìn)行通訊,LUA腳本會(huì)把相關(guān)數(shù) 據(jù)通過(guò)UDP傳送給瀏覽器。本發(fā)明的優(yōu)點(diǎn)在于在標(biāo)準(zhǔn)的B/S架構(gòu)上進(jìn)行功能擴(kuò)展,配合加密認(rèn)證等安全功 能,能夠在客戶端瀏覽器中控制本地資源,使B/S架構(gòu)能夠做到C/S架構(gòu)的所有功能,且所 有的業(yè)務(wù)邏輯由服務(wù)端發(fā)布,C/S架構(gòu)下的業(yè)務(wù)邏輯變更而引起的軟件升級(jí)在這種模式下 對(duì)用戶來(lái)說(shuō)是透明的,能夠做到快速開發(fā)、快速部署。
下面參照附圖結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。圖1是本發(fā)明采用LUA腳本對(duì)本地外設(shè)資源進(jìn)行控制的調(diào)用流程圖。圖2是本發(fā)明執(zhí)行流程示意圖。圖3是本發(fā)明中LUA腳本把執(zhí)行結(jié)果反饋給瀏覽器,瀏覽器再顯示在相應(yīng)的控件 上的流程示意圖。
圖4是本發(fā)明中LUA腳本擴(kuò)展模塊加載調(diào)用流程圖。
具體實(shí)施方式
LUA是一種輕量語(yǔ)言,它的官方版本只包括一個(gè)精簡(jiǎn)的核心和最基本的庫(kù)。這使 得LUA體積小、啟動(dòng)速度快。它用標(biāo)準(zhǔn)C語(yǔ)言編寫并以源代碼形式開放,編譯后僅僅一百余 K,可以很方便的嵌入別的程序里并且可以很容易地被擴(kuò)展由宿主語(yǔ)言(通常是C或C++) 提供這些功能,LUA可以使用它們,就像是本來(lái)就內(nèi)置的功能一樣。LUA虛擬機(jī)為了保持簡(jiǎn)潔性和可移植性并沒有包含太多的功能模塊和操作系統(tǒng)相 關(guān)模塊。為了滿足實(shí)際的需求如控制本地外設(shè)資源,IPC通信等,就需要通過(guò)實(shí)現(xiàn)擴(kuò)展模塊 來(lái)拓展LUA的功能。很多編程語(yǔ)言都能夠用來(lái)編寫LUA擴(kuò)展模塊,由于是嵌入式平臺(tái),這里 采用C/C++語(yǔ)言來(lái)編寫擴(kuò)展模塊。擴(kuò)展模塊一般作為共享庫(kù)(動(dòng)態(tài)庫(kù))由虛擬機(jī)來(lái)加載。 LUA定義了擴(kuò)展模塊與虛擬機(jī)間的交互接口,擴(kuò)展模塊只要按LUA接口規(guī)范導(dǎo)出接口就可 以。以下以IPC通訊模塊,設(shè)備控制模塊來(lái)說(shuō)明本發(fā)明的優(yōu)點(diǎn)。通過(guò)以上2個(gè)模塊,可使得LUA具備對(duì)本地外設(shè)資源的控制和同其它程序進(jìn)行IPC 通信的能力。根據(jù)實(shí)際的需求還可以編寫其它模塊。 通過(guò)設(shè)備控制模塊,LUA能夠控制磁條卡,PS2掃描槍,LED燈,小液晶,邏輯加密卡 等本地外設(shè)資源,IPC通訊模塊實(shí)現(xiàn)了 TCP,UDP, FIFO機(jī)制。調(diào)用流程如圖1所示。根據(jù)實(shí)際業(yè)務(wù)的需求在網(wǎng)頁(yè)腳本中嵌入LUA腳本,當(dāng)終端嵌入式瀏覽器下載解析 該頁(yè)面時(shí)就會(huì)提取其中的LUA腳本,立刻或者是在某個(gè)用戶輸入事件時(shí)如點(diǎn)擊某個(gè)按鈕之 后調(diào)用虛擬機(jī)執(zhí)行相應(yīng)的LUA腳本。執(zhí)行流程如圖2所示。由于在標(biāo)準(zhǔn)的網(wǎng)頁(yè)腳本中嵌入了 LUA腳本,需要對(duì)TOB瀏覽器做修改,使其具備從 網(wǎng)頁(yè)腳本中提取LUA腳本和在觸發(fā)某個(gè)事件時(shí)執(zhí)行相應(yīng)腳本的能力。如果瀏覽器需要獲取LUA腳本的執(zhí)行結(jié)果時(shí),就需要LUA腳本把執(zhí)行結(jié)果通過(guò)IPC 機(jī)制反饋給瀏覽器,瀏覽器再顯示在相應(yīng)的控件上。如圖3所示。例如操作PS2掃描槍,邏 輯加密卡等外設(shè)資源就涉及到結(jié)果反饋的問(wèn)題。只有很少一部分操作不用獲取執(zhí)行結(jié)果, 例如執(zhí)行打印任務(wù)時(shí)。WEB瀏覽器和LUA腳本之間采用UDP的方式進(jìn)行通訊LUA腳本會(huì)把相關(guān)數(shù)據(jù)通過(guò) UDP傳送給瀏覽器。當(dāng)然還可以采用其它的IPC機(jī)制,可根據(jù)實(shí)際需求做調(diào)整。1、LUA虛擬機(jī)與C程序間的接口。在嵌入式平臺(tái)上,由于資源的有限性,一般采用C/C++來(lái)編寫LUA擴(kuò)展模塊。
并不是所有C函數(shù)都能被LUA調(diào)用。LUA定義了接口 C函數(shù)的原型typedef int ( -k LUA_CFunction) (LUA_State -k L);一旦一個(gè)C函數(shù)被注冊(cè)之后并保存到LUA中,就可以在腳本中直接調(diào)用這個(gè)函數(shù)。例如在設(shè)備控制模塊中注冊(cè)了如下接口供腳本調(diào)用 static LUAL_reg device_op[]={{〃 _gc〃 ,LUA_dev_close},{〃 _tostring",LUA_HELPER::LUA_Auxiliar::tostring},{" write" , LUA_dev_write},{" read" ,LUA_dev_read},{〃 readn“ ,LUA_dev_recvn},{〃 setoption" , LUA_dev_setoption},{NULL,NULL}};static LUAL_reg func [] = {{〃 open" , global_create},{NULL, NULL}};int LUAopen_xn_device (LUA_State -k L){LUA_HELPER::LUA_Auxiliar::newclass(L,“ XN{DEVICE}" , device_op);LUAL_openlib(L, “ device〃, func,0);#ifdef XN2410_SHEN9ALUA_DEVICE::xn2410_shen9a::open (L);#endif#ifdef XN79525_HR2288_5KC03LUA_DEVICE::xn79525_hr2288_5kc03::open (L);#endifreturn 1 ;}上面代碼中的deViCe_op和func就是該模塊導(dǎo)出的接口列表。通過(guò)LUA提供的 相關(guān)接口如LUAL_openlib,對(duì)接口進(jìn)行注冊(cè)。2、LUA腳本中引用擴(kuò)展模塊在LUA腳本中可通過(guò)require指令來(lái)加載擴(kuò)展模塊。下面以設(shè)備控制模塊為例來(lái) 說(shuō)明擴(kuò)展模塊的加載流程,流程圖如圖4所示A)設(shè)備控制模塊的文件名稱是libdevice. soB)在腳本中執(zhí)行命令require (〃 xn. device")時(shí),LUA虛擬機(jī)會(huì)通過(guò)系統(tǒng)調(diào)用 (例如dlopen)來(lái)加載libdevice. so這個(gè)動(dòng)態(tài)庫(kù)。C)加載這個(gè)動(dòng)態(tài)庫(kù)之后,LUA虛擬機(jī)會(huì)調(diào)用LUAoperuxrudevice函數(shù)。這樣函數(shù)列表中的所有函數(shù)就會(huì)被注冊(cè)并保存到LUA中。執(zhí)行完上面的操作之后,在LUA腳本中就能調(diào)用以上注冊(cè)的C函數(shù)了。同樣以設(shè)備控制模塊為例來(lái)說(shuō)明function printer ()ο, msg = device, open(unpack(printer_info))if not ο then
error (msg)endmsg = ο:setoption (' {poweron}')if msg thenerror (msg)endmsg = ο:setoption(' {setfont}' , unpack(font_info))if msg thenerror (msg)endreturn οend上面的代碼為一個(gè)控制本地外設(shè)打印機(jī)的腳本。腳本首先調(diào)用devce. open操作 來(lái)打開設(shè)備。然后在調(diào)用setoption來(lái)對(duì)設(shè)備進(jìn)行上電和設(shè)置字體信息的操作。通過(guò)把上面的腳本嵌入到網(wǎng)頁(yè)腳本中,可以增強(qiáng)B/S架構(gòu)的應(yīng)用程序處理本地資 源的能力。3、嵌入式瀏覽器中的執(zhí)行流程。嵌入式瀏覽器擴(kuò)展可處理的標(biāo)簽,如{ “ LUAscript “ , WMLAttributeType: :cdata} , { “ LUAtype “, WMLAttributeType::cdata}Browser下載完Web腳本(html或wml文件)后,分析腳本中XML節(jié)點(diǎn)的屬性如果 節(jié)點(diǎn)A屬性中存在LUAtype ="xxxx" (xxxx為瀏覽器和LUA解析器協(xié)議的類型。如PS2/ Print),則獲取LUAscript的內(nèi)容保存為L(zhǎng)UA腳本,傳遞當(dāng)前節(jié)點(diǎn)A的ID和LUA腳本內(nèi)容 給LUA解析器。根據(jù)LUAtype定義,如果LUA腳本有內(nèi)容返回,則瀏覽器在UDP端口(LUA 解析器與瀏覽器之間的協(xié)議的socket通訊端口)XXXX上監(jiān)聽等待信息返回,瀏覽器得到信 息后,根據(jù)信息中的ID獲得當(dāng)前頁(yè)面對(duì)應(yīng)的控件進(jìn)行對(duì)應(yīng)控制。#ifdef_LUASCRIPT_SUPPORT_#define LUA_UDPP0RT 11111H當(dāng)前各個(gè)子進(jìn)程的列表typedef struct Tag_LUAComm{char iType[10];
char content[2氺1024];} TLUAComm ;//進(jìn)行LUA腳本處理的類,
class LUA_Script{public LUA_Script (); LUA_Script ();public void Create_LUAApp(const char氺scriptContent);void KillAll_LUAChild(void);private //當(dāng)前LUA進(jìn)程的列表list<pid_t>LUAList ;H監(jiān)控與LUA腳本通訊的線程pthread_t LUA_thread ;H創(chuàng)建與LUA腳本通訊的線程void MakeLUAComm_thread(void);void FreeLUAComm thread(void);};#endif本發(fā)明在標(biāo)準(zhǔn)的B/S架構(gòu)上進(jìn)行功能擴(kuò)展,配合加密認(rèn)證等安全功能,能夠在客 戶端瀏覽器中控制本地資源,使B/S架構(gòu)能夠做到C/S架構(gòu)的所有功能,且所有的業(yè)務(wù)邏輯 由服務(wù)端發(fā)布,C/S架構(gòu)下的業(yè)務(wù)邏輯變更而引起的軟件升級(jí)在這種模式下對(duì)用戶來(lái)說(shuō)是 透明的,能夠做到快速開發(fā)、快速部署。
權(quán)利要求
一種在B/S架構(gòu)下通過(guò)LUA腳本控制本地資源的方法,其特征在于包括根據(jù)實(shí)際業(yè)務(wù)的需求在網(wǎng)頁(yè)腳本中嵌入LUA腳本當(dāng)終端嵌入式WEB瀏覽器下載解析該頁(yè)面時(shí)就會(huì)提取其中的LUA腳本,立刻或者是在某個(gè)用戶輸入事件時(shí)調(diào)用虛擬機(jī)執(zhí)行相應(yīng)的LUA腳本;對(duì)WEB瀏覽器做修改,使其具備從網(wǎng)頁(yè)腳本中提取LUA腳本和在觸發(fā)某個(gè)事件時(shí)執(zhí)行相應(yīng)腳本的能力。
2.如權(quán)利要求1所述的一種在B/S架構(gòu)下通過(guò)LUA腳本控制本地資源的方法,其特征 在于還包括如果瀏覽器需要獲取LUA腳本的執(zhí)行結(jié)果時(shí),就需要LUA腳本把執(zhí)行結(jié)果通 過(guò)IPC機(jī)制反饋給瀏覽器,瀏覽器再顯示在相應(yīng)的控件上。
3.如權(quán)利要求1所述的一種在B/S架構(gòu)下通過(guò)LUA腳本控制本地資源的方法,其特征 在于所述WEB瀏覽器和LUA腳本之間采用UDP的方式進(jìn)行通訊,LUA腳本會(huì)把相關(guān)數(shù)據(jù)通 過(guò)UDP傳送給瀏覽器。
全文摘要
一種在B/S架構(gòu)下通過(guò)LUA腳本控制本地資源的方法,包括根據(jù)實(shí)際業(yè)務(wù)的需求在網(wǎng)頁(yè)腳本中嵌入LUA腳本,當(dāng)終端嵌入式WEB瀏覽器下載解析該頁(yè)面時(shí)就會(huì)提取其中的LUA腳本,立刻或者是在某個(gè)用戶輸入事件時(shí)調(diào)用虛擬機(jī)執(zhí)行相應(yīng)的LUA腳本;對(duì)WEB瀏覽器做修改,使其具備從網(wǎng)頁(yè)腳本中提取LUA腳本和在觸發(fā)某個(gè)事件時(shí)執(zhí)行相應(yīng)腳本的能力。本發(fā)明采用LUA取代javascript作為瀏覽器的嵌入式腳本解析器,使瀏覽器對(duì)本地資源的訪問(wèn)變得容易。
文檔編號(hào)G06F17/30GK101840415SQ20101012539
公開日2010年9月22日 申請(qǐng)日期2010年3月15日 優(yōu)先權(quán)日2010年3月15日
發(fā)明者何曉水, 聶景春, 趙進(jìn)云 申請(qǐng)人:福建鑫諾通訊技術(shù)有限公司