CNCAPI設計

BOOL BOOL BOOL

CNC 客戶機的API設計
類CNCClient客戶機用來實現“發布—訂閱”和“組播”功能,主要接口(公有函式)如下:
class CNCClient
{ public:
BOOL Connect(…); // 連線伺服器
BOOL Disconnect(); // 與伺服器下線
BOOL PublishData(…); // 向服務器發布數據
BOOL QueryData(…); // 向伺服器查詢數據
BOOL SubscribeData(…); // 向伺服器訂閱數據
GROUPIP QueryGroupIP(…); // 向伺服器查詢組播地址
DWORD MulticastMessage(…); // 傳送組播訊息
virtual void MessageResponse(…);// 回響組播訊息

};
一、客戶程式的“發布”協定
客戶機向伺服器發布的每個數據報均含有數據類型、工作組名稱、數據名稱、生命期和數據長度的信息。數據結構見 DataPublish :
struct DataPublish
{
BYTE iDataType; // 2 個位元組數據類型,宏定義為DATA_PUBLISH
char strGroupName[16]; // 16個位元組的工作組名字
char strDataName[16]; // 16個位元組的數據名字
DWORD dwLifeTime; // 4 個位元組的數據生命期,以秒為單位
DWORD dwLength; // 4 個位元組的數據內容的長度
char *pchContent; // 數據內容
};
2位元組 16位元組 16位元組 4位元組 4位元組
data type group name data name life time length content
二、客戶程式的“訂閱”協定
客戶機向伺服器訂閱數據分兩步實現:
(1)先調用函式QueryData向伺服器傳送一個 DataQuery格式的報文,用於查詢要訂閱的數據是否存在。
struct DataQuery
{
BYTE iDataType; // 2 個位元組數據類型,宏定義為DATA_QUERY
char strGroupName[16]; // 16個位元組的工作組名字
char strDataName[16]; // 16個位元組的數據名字
};
(2)伺服器接收到查詢時,按照 DataQuery結構中的strGroupName和strDataName進行搜尋。如果該數據不存在,Server向Client傳送一個FALSE標誌。如果該數據存在,伺服器先向客戶機傳送一個TRUE標誌,之後立即再向客戶機傳送該數據(DataPublish格式)。
如果客戶機得到TRUE標誌的查詢結果,就調用函式SubscribeData來接收伺服器傳送過來的數據。
三、客戶程式的“組播”協定
客戶機先調用函式QueryGroupIP向伺服器傳送一個GroupAddress格式的報文,用於查詢組播地址。伺服器返回相應的十進制點分式的IP位址。
struct GroupAddress
{
BYTE iDataType; // 2 個位元組數據類型,宏定義為GROUP_ADDRESS
char strGroupName[16]; // 16個位元組的工作組名字
};
客戶機調用函式MulticastMessage向指定的組(根據組播地址)播放訊息。組播的數據報結構 DataMulticast定義如下:
struct DataMulticast
{
DWORD dwContentType; // 組播的數據報類型,由用戶定義
char *pchContent; // 組播的數據報內容,由用戶定義
};
如果客戶機接收到組播的訊息,將自動調用函式MessageResponse來回響該訊息。MessageResponse是虛函式,它將根據dwContentType信息決定如何處理到來的組播訊息,具體功能由用戶定義。

相關詞條

相關搜尋

熱門詞條

聯絡我們