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