[MFCMessage]兩個程式之間的訊息Handshake機制(非程式)

這幾天在構思整個公司的軟體重整,想要弄一個大軟體計畫。每每一個介面上的更動,就要耗所有的RD對所有有關的AP去做修改,耗時又耗力。而且不一定改得對。於是我想把許多的元件都拉出來變成DLL或是COM的方式去建立,維護共用的就容易的多。目前只有收送封包的部份是用我寫的共用DLL,UI介面上還是各自維護各自的。我想這是將來的事情了,光是架構上就很難畫。

再來還有一個最大的問題就是LOG機制,我們每支軟體有自己的LOG機制,有的是寫在EditBox裡頭,使用者決定呈現與否,有的是寫在console裡頭呈現,看起來嘛,就是很工程,然後存檔機制什麼的也都不相同,這個總是被唸的一大部分。現在我就根據上面所發想的機制,先搞一個DebugLog程式出來,大家統一用這個就好~~~至於怎麼統一呢?慢慢說來。

假設一種情況,如果今天我有一個獨立的DebugLog程式,放到任何一支公司軟體下,他就能將Log輸出到DebugLog程式處理,這樣應該會很完美。只要彼此之間透過訊息來溝通就好。那如果沒有這支程式呢?簡單啊,不要處理就好了。

所以接著談的這個訊息機制,其實很多網路封包協定的handshake機制也是這樣做,應該可以處理各種狀況發生的。重點在於兩個Process之間的通訊。

Step 0.
工作管理員中有很多的處理程序,假設其中某一些是我們自行開啟的程式,稱作"Pro*.exe",然後也有一些是執行起來的DebugLog程式,稱作"DLog.exe"。DLog不一定要在同一個資料夾下,不然就沒有便利性,沒有還要去安裝路徑開啟或是貼上,所以我用的方式是不限定位置的。定義的訊息至少有兩個欄位(以後擴充,還需要帶更多東西):
struct{
int dID;//代表DLog的ProcessID
int pID;//代表Pro*.exe的ProcessID
}

Step 1.
假定Pro1.exe透過Process32First/Next找到所有稱作DLog.exe的程式。如果沒有,透過CreateProcess方式,再不行,就不處理,表示路徑下和環境中沒有這支程式。

Step 2.
找自己的ProcessID(1234),送訊息給所有的DLog.exe(dID=0, pID=1234)


Step 3.
所有DLog.exe收到後,判斷自己程式的bID(belong)是否為0,是的話把pID填入bID,然後取得自己的ProcessID,對pID的程序送訊息

Step 4. Pro1.exe收到的第一個訊息後(假設dID=77),將pID和dID記住,再發送訊息給"所有"DLog.exe。

Step 5.
所有DLog.exe收到後,判斷自己的bID和訊息的dID不同,就把bID清為0


Step 6.
之後Pro1.exe和特定的DLog.exe就可以綁一起了


透過以上的機制,在茫茫程式海裡頭,就沒有要怎知道該把訊息丟給誰來接?那開這麼多個一樣名稱的程式誰來回應我?和誰溝通?等的問題發生了。

先建立handshark機制,晚點再來實做。

0 意見:

搜尋此網誌

總網頁瀏覽量

TK呱呱

Made with by TK