• 沒有找到結果。

事件處理模組(Event Handler Module)

第三章 設計理念

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接觸的事件都放入此模組內,模組內通用的方式使得開發者能輕易 地使用及擴展原先的架構,加入新的事件也變得更輕鬆更快速,是我們設計這個模組的 重要依據。

相關文件