一种在b/s架构下通过lua脚本控制本地资源的方法

文档序号:6599261阅读:472来源:国知局
专利名称:一种在b/s架构下通过lua脚本控制本地资源的方法
一种在B/S架构下通过LUA脚本控制本地资源的方法
技术领域
本发明属于具有嵌入式WAP浏览器功能的终端产品,具体是指一种在B/S架构下 通过LUA脚本控制本地资源的方法。
背景技术
终端产品在功能上除了具有普通的通讯功能外,还可能根据产品的应用行业的业 务需要,定制了不同的应用程序来完成行业中的一些应用要求,传统的做法是1.采用C/S架构设计,客户端应用程序完成绝大部分业务逻辑,在有需要时与服 务端程序进行数据交互,客户端应用程序对本地资源具有控制权。2.采用B/S架构设计,客户端运行浏览器并连接至服务器,大部分业务逻辑和数 据都由服务器传至本地运行。但浏览器不具备对本地资源的控制能力,与本地资源相关的 业务逻辑在这种架构下难以实现。这两种方式各有优缺点,B/S架构下的客户端浏览器在处理本地资源的能力上 较弱,特别是一些可配置的外设,例如扫描枪、打印机、读卡器等。如果浏览器需要和这些 外设进行交互,一定需要扩展脚本处理的能力。目前浏览器当中内嵌的脚本语言一般为 javascript,而本地资源提供的驱动接口 一般为C函数库,javascript不能直接调用C函数库。

发明内容本发明所要解决的技术问题在于提供一种在B/S架构下通过LUA脚本控制本地资 源的方法,采用LUA取代javascript作为浏览器的嵌入式脚本解析器,使浏览器对本地资 源的访问变得容易。本发明采用以下技术方案解决上述技术问题一种在B/S架构下通过LUA脚本控制本地资源的方法,包括根据实际业务的需 求在网页脚本中嵌入LUA脚本,当终端嵌入式TOB浏览器下载解析该页面时就会提取其中 的LUA脚本,立刻或者是在某个用户输入事件时调用虚拟机执行相应的LUA脚本;对TOB浏 览器做修改,使其具备从网页脚本中提取LUA脚本和在触发某个事件时执行相应脚本的能 力。还包括如果浏览器需要获取LUA脚本的执行结果时,就需要LUA脚本把执行结果 通过IPC机制反馈给浏览器,浏览器再显示在相应的控件上。所述WEB浏览器和LUA脚本之间采用UDP的方式进行通讯,LUA脚本会把相关数 据通过UDP传送给浏览器。本发明的优点在于在标准的B/S架构上进行功能扩展,配合加密认证等安全功 能,能够在客户端浏览器中控制本地资源,使B/S架构能够做到C/S架构的所有功能,且所 有的业务逻辑由服务端发布,C/S架构下的业务逻辑变更而引起的软件升级在这种模式下 对用户来说是透明的,能够做到快速开发、快速部署。
下面参照附图结合实施例对本发明作进一步的描述。图1是本发明采用LUA脚本对本地外设资源进行控制的调用流程图。图2是本发明执行流程示意图。图3是本发明中LUA脚本把执行结果反馈给浏览器,浏览器再显示在相应的控件 上的流程示意图。
图4是本发明中LUA脚本扩展模块加载调用流程图。
具体实施方式
LUA是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使 得LUA体积小、启动速度快。它用标准C语言编写并以源代码形式开放,编译后仅仅一百余 K,可以很方便的嵌入别的程序里并且可以很容易地被扩展由宿主语言(通常是C或C++) 提供这些功能,LUA可以使用它们,就像是本来就内置的功能一样。LUA虚拟机为了保持简洁性和可移植性并没有包含太多的功能模块和操作系统相 关模块。为了满足实际的需求如控制本地外设资源,IPC通信等,就需要通过实现扩展模块 来拓展LUA的功能。很多编程语言都能够用来编写LUA扩展模块,由于是嵌入式平台,这里 采用C/C++语言来编写扩展模块。扩展模块一般作为共享库(动态库)由虚拟机来加载。 LUA定义了扩展模块与虚拟机间的交互接口,扩展模块只要按LUA接口规范导出接口就可 以。以下以IPC通讯模块,设备控制模块来说明本发明的优点。通过以上2个模块,可使得LUA具备对本地外设资源的控制和同其它程序进行IPC 通信的能力。根据实际的需求还可以编写其它模块。 通过设备控制模块,LUA能够控制磁条卡,PS2扫描枪,LED灯,小液晶,逻辑加密卡 等本地外设资源,IPC通讯模块实现了 TCP,UDP, FIFO机制。调用流程如图1所示。根据实际业务的需求在网页脚本中嵌入LUA脚本,当终端嵌入式浏览器下载解析 该页面时就会提取其中的LUA脚本,立刻或者是在某个用户输入事件时如点击某个按钮之 后调用虚拟机执行相应的LUA脚本。执行流程如图2所示。由于在标准的网页脚本中嵌入了 LUA脚本,需要对TOB浏览器做修改,使其具备从 网页脚本中提取LUA脚本和在触发某个事件时执行相应脚本的能力。如果浏览器需要获取LUA脚本的执行结果时,就需要LUA脚本把执行结果通过IPC 机制反馈给浏览器,浏览器再显示在相应的控件上。如图3所示。例如操作PS2扫描枪,逻 辑加密卡等外设资源就涉及到结果反馈的问题。只有很少一部分操作不用获取执行结果, 例如执行打印任务时。WEB浏览器和LUA脚本之间采用UDP的方式进行通讯LUA脚本会把相关数据通过 UDP传送给浏览器。当然还可以采用其它的IPC机制,可根据实际需求做调整。1、LUA虚拟机与C程序间的接口。在嵌入式平台上,由于资源的有限性,一般采用C/C++来编写LUA扩展模块。
并不是所有C函数都能被LUA调用。LUA定义了接口 C函数的原型typedef int ( -k LUA_CFunction) (LUA_State -k L);一旦一个C函数被注册之后并保存到LUA中,就可以在脚本中直接调用这个函数。例如在设备控制模块中注册了如下接口供脚本调用 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就是该模块导出的接口列表。通过LUA提供的 相关接口如LUAL_openlib,对接口进行注册。2、LUA脚本中引用扩展模块在LUA脚本中可通过require指令来加载扩展模块。下面以设备控制模块为例来 说明扩展模块的加载流程,流程图如图4所示A)设备控制模块的文件名称是libdevice. soB)在脚本中执行命令require (〃 xn. device")时,LUA虚拟机会通过系统调用 (例如dlopen)来加载libdevice. so这个动态库。C)加载这个动态库之后,LUA虚拟机会调用LUAoperuxrudevice函数。这样函数列表中的所有函数就会被注册并保存到LUA中。执行完上面的操作之后,在LUA脚本中就能调用以上注册的C函数了。同样以设备控制模块为例来说明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上面的代码为一个控制本地外设打印机的脚本。脚本首先调用devce. open操作 来打开设备。然后在调用setoption来对设备进行上电和设置字体信息的操作。通过把上面的脚本嵌入到网页脚本中,可以增强B/S架构的应用程序处理本地资 源的能力。3、嵌入式浏览器中的执行流程。嵌入式浏览器扩展可处理的标签,如{ “ LUAscript “ , WMLAttributeType: :cdata} , { “ LUAtype “, WMLAttributeType::cdata}Browser下载完Web脚本(html或wml文件)后,分析脚本中XML节点的属性如果 节点A属性中存在LUAtype ="xxxx" (xxxx为浏览器和LUA解析器协议的类型。如PS2/ Print),则获取LUAscript的内容保存为LUA脚本,传递当前节点A的ID和LUA脚本内容 给LUA解析器。根据LUAtype定义,如果LUA脚本有内容返回,则浏览器在UDP端口(LUA 解析器与浏览器之间的协议的socket通讯端口)XXXX上监听等待信息返回,浏览器得到信 息后,根据信息中的ID获得当前页面对应的控件进行对应控制。#ifdef_LUASCRIPT_SUPPORT_#define LUA_UDPP0RT 11111H当前各个子进程的列表typedef struct Tag_LUAComm{char iType[10];
char content[2氺1024];} TLUAComm ;//进行LUA脚本处理的类,
class LUA_Script{public LUA_Script (); LUA_Script ();public void Create_LUAApp(const char氺scriptContent);void KillAll_LUAChild(void);private //当前LUA进程的列表list<pid_t>LUAList ;H监控与LUA脚本通讯的线程pthread_t LUA_thread ;H创建与LUA脚本通讯的线程void MakeLUAComm_thread(void);void FreeLUAComm thread(void);};#endif本发明在标准的B/S架构上进行功能扩展,配合加密认证等安全功能,能够在客 户端浏览器中控制本地资源,使B/S架构能够做到C/S架构的所有功能,且所有的业务逻辑 由服务端发布,C/S架构下的业务逻辑变更而引起的软件升级在这种模式下对用户来说是 透明的,能够做到快速开发、快速部署。
权利要求
一种在B/S架构下通过LUA脚本控制本地资源的方法,其特征在于包括根据实际业务的需求在网页脚本中嵌入LUA脚本当终端嵌入式WEB浏览器下载解析该页面时就会提取其中的LUA脚本,立刻或者是在某个用户输入事件时调用虚拟机执行相应的LUA脚本;对WEB浏览器做修改,使其具备从网页脚本中提取LUA脚本和在触发某个事件时执行相应脚本的能力。
2.如权利要求1所述的一种在B/S架构下通过LUA脚本控制本地资源的方法,其特征 在于还包括如果浏览器需要获取LUA脚本的执行结果时,就需要LUA脚本把执行结果通 过IPC机制反馈给浏览器,浏览器再显示在相应的控件上。
3.如权利要求1所述的一种在B/S架构下通过LUA脚本控制本地资源的方法,其特征 在于所述WEB浏览器和LUA脚本之间采用UDP的方式进行通讯,LUA脚本会把相关数据通 过UDP传送给浏览器。
全文摘要
一种在B/S架构下通过LUA脚本控制本地资源的方法,包括根据实际业务的需求在网页脚本中嵌入LUA脚本,当终端嵌入式WEB浏览器下载解析该页面时就会提取其中的LUA脚本,立刻或者是在某个用户输入事件时调用虚拟机执行相应的LUA脚本;对WEB浏览器做修改,使其具备从网页脚本中提取LUA脚本和在触发某个事件时执行相应脚本的能力。本发明采用LUA取代javascript作为浏览器的嵌入式脚本解析器,使浏览器对本地资源的访问变得容易。
文档编号G06F17/30GK101840415SQ20101012539
公开日2010年9月22日 申请日期2010年3月15日 优先权日2010年3月15日
发明者何晓水, 聂景春, 赵进云 申请人:福建鑫诺通讯技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1