第三章 設計理念
3.2 元件模組及設計依據
3.2.2 事件處理模組(Event Handler Module)
圖 11為事件處理模組的功能區塊圖。由於WF是此架構的中心技術,一個系統運作流程 的處理即是使用WF中的工作流程執行引擎(WF Runtime Engine)來完成。工作流程個體 (Workflow Instance)內可以傳遞與接收事件的發生,但因為流程個體是由工作流程執行引 擎(WF Runtime Engine)所啟動及執行,只有屬於執行引擎內的事件,流程個體才能接收 的到。此研究以執行引擎的內外部作為基準,將事件分為內部事件(Internal Event)以及 外部事件(External Event),外部事件的觸發需透過此事件處理模組(Event Handler Module) 轉換成對應的內部事件來與流程個體進行溝通,流程個體也能經由模組來發出訊息讓外 部程式接收到。
圖 11: 事件處理模組區塊
3.2.2.1 事件種類
事件處理模組是由三種事件架構而成:
UPnP 事件(UPnP Events)
屬於外部事件(External Event),通常是環境中的裝置有所動作而觸發,經由 UPnP 控制點得到,並在控制點上進行事件處理。UPnP 事件又可分為三種類型:
1. 發現事件(Discovery Events)是環境中的 UPnP 裝置加入到網路時所被立即反應 出的事件,是 UPnP 內不可或缺的事件。
2. 移除事件(Removal Events)是環境中的 UPnP 裝置從網路上被移除時反應出的 事件,是 UPnP 內不可或缺的事件。
3. 變數事件(Parameter Events)由 UPnP 裝置上的變數改變而觸發,這些變數可以 為環境上的變數因子(如光度、溫度等),也可以為人類所決定的變數(如光度設 定、物品名稱等),變數事件是對應這些變數改變而產生的。變數事件由控制 點中的事件機制(Event Mechanism)來取得。
使用者事件(User Events)
使用者事件(User Events)也是屬於外部事件的一種,由使用者的行為所觸發,通常 都是經由調控介面模組(Configuration Interface Module)來接收。使用者事件會與系 統中需要操控的變數做配合。
工作流程事件(Workflow Events)
流程個體可接收唯一的內部事件。流程個體使用標準活動的處理外部事件活動 (HandleExternalEventActivity)來接收宣告定義在介面(Interface)中的工作流程事件。
除了流程個體外,也可以在其他地方接收及處理工作流程事件,用來更新及顯示自 動化流程的資訊(如在調控介面模組上顯示)。此外,流程個體中的狀態機工作流程 (State Machine Workflow)內所有的狀態流程轉換,也是透過工作流程事件的觸發來 進行的。
3.2.2.2 處理模組功能
事件處理模組主要有以下的功能機制:
事件引數機制(Workflow Event Argument)
流程個體ID (Workflow Instance ID)是傳遞工作流程事件(Workflow Event)時最重要 的引數。由於流程個體可以同時有多個工作流程執行,具有這個引數才能將工作流 { private Dictionary<String,object> _args;
public WorkflowEventArgs(Guid instanceId, Dictionary<String,object> a): base(instanceId) {
_args = a;
}
public Dictionary<String, object> args {
get { return _args; } set { _args = value; } }
}
事件列舉機制(Enumeration Event Type)
如前面所提到,為了讓 Workflow 能取得事件的觸發,事件處理模組將所有的外部 事件(UPnP、User Event)都轉換成為內部事件(Workflow Event),模組內使用了事件 列舉機制,將所有的事件列舉成不同的事件類型且一一做對應及轉換,其他的模組 可以透過列舉機制取得事件處理模組內的所有事件,正確地加以運用。
觸發事件機制(Raise Event Function)
如圖 11中Raise所示,事件處理模組提供一個通用的機制讓各模組可以觸發任何的 工作流程事件[圖 11 Workflow Event],且配合列舉機制簡化了原先每個事件都要各
自的觸發事件機制這樣的詬病,利用此機制所取得的事件種類以及事件引數,做為 欲觸發事件的選擇以及傳遞的引數。
設計依據:在第二章的WF技術中,我們曾經提到合約服務(Local Service),是一條讓外 部程式與Workflow進行溝通的管道,也可以讓Workflow透過函式呼叫來聯絡外部程式[
圖 11 Call Function]。事件處理模組透過合約服務的方式與WF技術結合,讓開發者可以 將所有欲和Workflow接觸的事件都放入此模組內,模組內通用的方式使得開發者能輕易 地使用及擴展原先的架構,加入新的事件也變得更輕鬆更快速,是我們設計這個模組的 重要依據。