以下是COM的發送
Function TCarrIEr.PutCOM(COMOBJ:TCOMPort;sdata:string):Boolean;
var Com:OleVariant;
begin
PutCOM:=false;
try
Com:=CreateOleObject(COMOBJ.ComFace);//建立預定義的接口
PutCOM:=Com.PutData(sdata);//調用預定義的方法
Com:= Unassigned;
except
Com:= Unassigned;
end;
end;
其它類型的Port發送大同小異,在此不再贅述。到此為止,Source和Target的基本處理已經完成。一個基本的通訊功能已經建立,經過不同類型的Source和Target的自由匹配,就可以實現完全不同的通訊功能。建立多個Channel,就可以集中實現多個不同功用的通訊處理。
ix. 隊列處理
在上文的DataArrive方法中當數據被發送之後,Data Dispatcher會調用數據日志記錄的writeLog和隊列化處理的PutQueue方法,二者的功能類似,都是根據系統參數對數據信息進行數據庫的存儲,不是本文的重點。而隊列的Retry處理與Timer事件中按Port類型分發處理的原理類似,是依賴於Queue Timer的觸發,將緩沖的數據從數據庫中讀出,並依照Target Port ID再次調用DataSend進行數據的發送重試,如發送成功,則本次數據傳輸的事務完成,否則重新進入隊列等待下一次觸發時間進行重試,直到發送成功或達到設置的最大重試數為止。
三、 開發經驗總結
由於本文的側重點在於說明Transceiver的核心思想與設計理念,簡化和削弱了Transceiver作為後台服務應當考慮的多線程處理、對象池化以及事務支持、更為復雜強大的Source和Target的Group管理和Channel集成、收發內存對象、數據流、二進制數據的能力、系統配置信息的讀取和其封裝類的實現、系統及數據的安全性等等,希望讀者朋友們能夠拋磚引玉,理解Transceiver的設計思想,啟發實際開發工作中的靈感火花,做出更加出色強大的軟件。