在這個章節將深入瞭解「基於工作流程與通用隨插即用技術下之整合性軟體開發架構」
的內部運作技術,探討的技術包括:
UPnP 裝置與 Workflow 模組之間的互動機制
發現機制動態配置工作流程
圖 22: UPnP 與 WF 技術互動流程
本架構運用UPnP以及WF兩大技術完成,在架構內最主要的運作流程都將會運用這兩項 技術,圖 22即是本章節在這兩大技術間所探討此架構的內部運作技術。除此之外,本 章節還會介紹如何在此軟體開發架構上使用這些運作技術來開發完成一項即時反應系 統。
4.1 UPnP裝置與Workflow元件的互動機制
在第三章,我們談到本架構的元件模組,瞭解大部分的元件模組都與UPnP和Workflow
Actuator_disco.OnAddedDevice += new DimmableLightDiscovery.DiscoveryHandler(Actuator_AddSink);
Actuator_disco.OnRemovedDevice += new DimmableLightDiscovery.DiscoveryHandler(Actuator_RemoveSink);
Actuator_disco.Start();
//Sensor
Sensor_disco.OnAddedDevice += new StandardizedLightSensorDiscovery.DiscoveryHandler(Sensor_AddSink);
Sensor_disco.OnRemovedDevice +=
new StandardizedLightSensorDiscovery.DiscoveryHandler(Sensor_RemoveSink);
Sensor_disco.Start();
2. UPnP 裝置加入之事件觸發 Workflow
啟動UPnP控制點後,如圖 22線條(2),UPnP控制點中的發現機制會偵測到網路上 UPnP裝置的加入,當新裝置加入,裝置會先存入控制資料庫的裝置庫(DeviceMap),
接著馬上透過事件處理機制觸發內部事件讓服務工作流程接收[表 6]。
表 6: 程式碼—裝置加入後的處理
private static void Actuator_AddSink(DimmableLightDiscovery sender, UPnPDevice d) {
StaticObject.map.Add_Actuator(d);
String _location = StaticObject.map.Get_Location(d);
Dictionary<String, object> WfArgs = new Dictionary<string, object>();
WfArgs.Add("Location", _location);
try {
StaticObject.SLocalService.RaiseEvent(EventTypes.Discovery,
new WorkflowEventArgs(StaticObject.DiscoveryInstanceId, WfArgs));
} static void StandardizedLightSensor_OnStateVariable_result
(CpStandardizedLightSensor sender, byte NewValue) {
UPnPDevice d;
String _location;
Guid SMInstanceID;
d = StaticObject.CpStand_To_UPnPDevice_Dict[sender];
_location = StaticObject.map.Get_Location(d);
if (StaticObject.Location_To_WorkflowID_Dict.ContainsKey(_location)) {
SMInstanceID = StaticObject.Location_To_WorkflowID_Dict[_location];
Dictionary<String, object> WfArgs = new Dictionary<string, object>();
WfArgs.Add("ML_ID", StaticObject.map.Get_ML_ID(d));
WfArgs.Add("SensorValue", NewValue);
StaticObject.SLocalService.RaiseEvent(EventTypes.Sense,
new WorkflowEventArgs(SMInstanceID, WfArgs));
表 8: 程式碼—低層控制裝置
CpSwitchPower SwitchPower = new CpSwitchPower(d.GetServices(CpSwitchPower.SERVICE_NAME)[0]);
SwitchPower.Sync_SetTarget(true);
CpDimming Dimming = new CpDimming(d.GetServices(CpDimming.SERVICE_NAME)[0]);
Dimming.Sync_SetLoadLevelTarget((byte)DimmingValue);
4.2 發現機制動態配置工作流程
運作工作流程是裝置在即時反應系統流程中運作的核心,其每個裝置在各自的工作流程 中,有著屬於自己的狀態及變數。為了配合著裝置可隨插即用的 UPnP 技術,動態配置 工作流程這樣的自動化偵測且配置流程的功能即產生,這些工作流程的配置,需要有功 能性的方法進行管理,如下列功能:
圖 23: 裝置透過服務工作流程動態對應運作工作流程
1. 呼叫流程功能:這是動態啟動一個工作流程的機制,對於每個加入網路的UPnP裝 置都有其ID或Location等等的特定變數,在服務工作流程內針對這些裝置的特定變 數做判斷處理。如圖 22線條(3),當加入未出現過的裝置,此機制會使用呼叫法則 (Invocation)啟動屬於此裝置的運作工作流程,藉此來完成系統運作流程;反之,若 是服務工作流程得到裝置的特定變數已經啟動,則不進行任何處理。透過動態的呼
叫流程機制,我們可以確保每一個裝置都有一個特定的運作工作流程配合運行[圖 23]。
2. 裝置對應流程:動態配置工作流程判斷所需的資料—工作流程個體 ID 以及裝置特 定變數,是在執行一個運作工作流程的最一開始即被一起存入的,接著動態配置工 作流程時就能根據控制資料庫(Control Database)的裝置是否存在做判斷。
3. 移除流程功能:即時反應系統會隨著裝置從網路中移除後而停止,在 WF 技術中運 行的運作工作流程此時也終止移除掉。對於動態地移除正確的運作工作流程,是當 移除發生時直接讓裝置對應的運作工作流程接收裝置所發出的移除事件(Removal Event),進而進入終止狀態來結束掉流程。除了結束掉流程外,控制資料庫也會因 為裝置及流程的終止進而移除掉其內部的資料。