RFID中间件ALE引擎是如何设计的

图3 引擎内核实现

一个 ECSpec 在内核里对应着一个事件周期管理者,应用层对于ALE 读接口的调用会 映射到具体的事件周期管理者上,由事件周期管理者来完成接口提供的功能。当一个 ECSpec 被定义时(即调用define 或immediate方法),引擎就会为这个ECSpec 创建 对应的事件周期管理者,同时创建一个事件周期对象和各种触发器。当ALE 接口调用请求 者第一次对某个ECSpec发出调用请求时(例如调用subscribe, poll, immediate 方法)将激活对应的事件周期管理者,此时由这个事件周期管理者所控制的事件周期对象和各个触 发器也被激活,事件周期对象开始按照ECSpec中所定义的边界条件开始和结束激活状态, 并收集RFID 标签数据。当最后一个接口调用请求的调用方法返回时,事件周期管理者再次 进入休眠状态,对应的事件周期对象和各个触发器也停止运行,直到被再次唤醒或者随着该 ECSpec 的撤销被撤销。

ECSpec 会在未请求、已请求和活跃状态三种状态的之间迁移,状态策略模块根据状 态转换的规则转换ECSpec的状态。外部调用请求会导致状态的变迁,不同的状态下接收 到相同的调用请求除了执行不同的操作外还可能使ECSpec 变迁为不同的后继状态,因此 这里使用了状态模式。每一时刻ECSpec 都会处于某一种状态中,事件周期管理者接收到 接口调用请求后都会把请求代理给状态策略模块,由当前状态策略决定对调用如何响应和确 定后继状态是什么。

ALE 标准中定义了事件周期触发器,并且具体定义了一个时间触发器。在引擎中,除了 这个时间触发器外,所有事件周期边界条件都被看作是一种触发器,因此抽象出一个触发器 接口Trigger 。事件周期中定义的各种的边界条件, 如duation, repeatPeriod, stableSetInterval 等等都是抽象Tigger 的具体实现。因此抽象Trigger 可以理解为影响事 件周期开始和结束的触发条件,而ALE 标准中所定义的ECTrigger 成为抽象Trigger 的其中 一种具体实现。在具体触发器的创建过程中使用了抽象工厂模式,事件周期管理者在初始化 的时候调用工厂方法创建各种具体的触发器。