AutoTool设计说明 v0.2
1. 初级设计目标
a) 实现脚本代码的编辑与执行;
b) 让脚本代码具备访问、操纵部分计算机资源的能力;
c) 实现事件驱动;
d) 提供运行容器,并建立相应的脚本相互作用机制(包括调用以及信息交换、共享)。
2. 系统组成
l 脚本类(TScriptProc)
存放脚本代码(包括被脚本引擎编译后的生成的二进制代码),能够被编辑、编译以及执行。脚本对象可以通过链接对象被挂接到脚本组对象上。
l 触发器类(TTrigger)
用于触发所在脚本组内的脚本对象。触发的方式有两种:
直接触发:接收到事件而被触发。
超时触发:在指定时间内没有接收到任何事件而被触发。
l 事件监听器类(TEventListener)
用于监听诸如时间、键盘、鼠标等事件,以将捕获的事件传送到相应的触发器。(注:此类是基类,对不同事件的监听由不同的子类实现)
l 脚本组类(TScriptGroup)
用于容纳脚本、触发器、监听器等对象,限制其中元素的可见范围。此外,还提供了封装对外操作的StdCmd(标准命令)对象,用于模拟鼠标、键盘、打开文件等标准操作。
在现在的设计中,每个脚本组都有一个独立的消息循环线程,所有的消息都在这个线程中被处理,并且,除非在挂接时有特别的配置,否则,其中的脚本也将在同一个线程中被顺序执行。当线程发现组中所有的监听器都处于未被激活状态,并且没有正在执行的脚本,就会自动进入结束程序。
每个脚本组都有一个初始化过程以及结束过程,用途顾名思义。需要指出的是,使用强制结束时,结束过程不会被执行。
l 脚本容器类(TScriptContainer)
用于容纳脚本以及脚本组对象(注意,脚本是被“挂接”到脚本组上的,不同的脚本组可以挂接同一个脚本——而每个脚本组的初始化过程以及结束过程则是脚本组的固定组成,不属于脚本容器),负责它们的保存以及读取操作。
脚本容器是AutoTool的加载对象,容器中有一个根脚本组,容器的执行就是从根脚本组开始的。
除了脚本以及脚本组对象之外,为了实现有效的信息共享,脚本容器中还有一个变量池(VarPool)、一个对象池(ObjPool)以及一个常量池(ConstPool)。其中的常量池中的信息是跟随脚本容器保存、读取的。
3. 系统架构图(constructing : P)