iad-simulator項目設計介紹(一個基於Python的IAD終端模擬器)

一、源碼路徑

https://github.com/weiganyi/iad-simulator


二、界面截圖



三、背景

我在工作中有時會要拿我們的IAD產品去對接一些異常SIP報文,通常是用一些UDP發包工具(如UDP Test Tool)來模擬給IAD發SIP異常報文。這種方法一方面沒辦法把SIP信令流程串起來,因爲SIP發送和接收消息的一些字段有依賴關係,另一方面定製過的消息沒法保存下來供下次使用。

我想寫一個工具來爲這種工作提供便利,這裏面主要的工作是進行字符串的替換和匹配,在這方面解釋腳本語言比編譯語言有優勢,所以我選擇了Python語言,而不是C或C++。另外我們通常在Window操作系統上工作,需要有圖形界面來方便操作,因爲命令行會降低使用者的接受度,Python語言的Window圖形庫主要是wxPython,所以我使用這個庫來做GUI。在做圖形界面時如果都是自己編碼的話會比較累,有一些拖拉式的開發工具可以幫助我,我選擇的是Boa Constructor。


四、功能實現

工具主要完成如下功能:

1、能夠通過GUI界面定製SIP信令發送和接收流程,按照流程完成與實際SIP終端或者SIP服務器之間的通信。

2、能夠對用例腳本進行管理,並提供了一些常用的SIP消息模板,也可以基於消息模板通過GUI界面來定製特殊的SIP消息報文內容。

3、由於SIP發送和接收消息的一些字段有依賴關係,所以構造消息時要能夠引用之前發送或者接收消息的某些字段,從而完成完整的信令流程。


五、總體設計思路

1、在圖形界面方面,Boa Constructor可以通過拖拉的方式完成主框架界面,自動生成相應的代碼。而樹和表格的內容取決於文件讀取的結果,所以需要在讀取相應文件後,調用wxPython接口來動態創建。

2、界面線程和用例運行線程要分開,避免界面卡死,另外收發包線程負荷較重也要獨立,所以定義如下線程:主界面、腳本運行、SIP包接收、SIP包發送、RTP包發送、RTP包接收。

3、由於工具邏輯較簡單,代碼規模整體不大,線程間交互也比較少,所以放棄消息串行的actor模式,採用輕量級鎖作爲線程間同步方式。

4、定義瞭如下全局對象:communicator、runner、codec、rtp。

5、設備配置信息和消息模板都不太複雜,採用ini格式文件來存儲,Python可以通過相應的configobj庫來讀寫,並且被解析成字典結構。

6、用例運行主要執行流如下:界面框架傳遞用例文件名給runner對象,runner對象起線程讀取文件內容並執行,communicator對象編碼消息後入socket隊列,socket發送線程等待socket隊列消息然後發送,或者communicator對象等待socket隊列,socke接收線程接收消息後入socket隊列。


六、文件及類的設計

module.py:定義了項目需要載入的模塊,供其他文件調用,減少冗餘代碼。

iad_simulater.py:定義應用程序對象類BoaApp,由Boa Constructor生成。

frame_window.py:定義了主框架窗口類frame_window,這個類運行在主界面進程。包含三個樹的顯示和操作,用例樹中每個用例節點有三個數據結構對應:py文件、樹節點、節點子窗口。還包含了菜單命令和工具欄命令的主要實現,通過觀察者模式反映當鼠標選擇GUI界面不同控件時,相應的菜單和工具欄的調整變化。

case_window.py:定義了用例子窗口類case_window,包含用例表格的顯示和編輯,用例表格中每一步驟行都有一個字符串記錄這行發生改變的消息。

msg_window.py:定義了消息子窗口類msg_window,包含模板消息窗口的顯示和編輯。

device_window.py:定義了消息子窗口類device_window,包含設備參數配置窗口的顯示和編輯。

msg_dialog.py: 定義了消息編輯對話框msg_dialog,可以對消息進行編輯。

com.py:自定義通信對象類communicator,定義了通信對象的系列方法,在用例腳本里面通過一系列的通信對象方法調用來作爲執行步驟。啓動socket和消息隊列,從消息隊列接收sip或rtp消息,然後通過socket發送出去,同時在socket監聽接收消息,然後通過消息隊列返回。

runner.py:自定義的腳本運行類runner,啓動獨立的運行進程來運行腳本,並顯示運行結果。

codec.py:自定義SIP消息編解碼類codec,從消息字典讀取消息,並對消息中的關鍵字進行替換,生成實際發送的SIP消息。或者把實際接收的消息與預期消息模板進行匹配,返回匹配結果。

util.py:包括各種輔助函數,如日誌輸出、設備參數讀寫、消息模板讀寫、字符串處理等。還包括觀察者模式對象類observer的實現。

(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章