/* * FILENAME: MsgAgent.h * */ //Function Prototype Declaration //////////////////////////////////////////////////////////////////////////// /* ConnectReal 連線到 Push Server , *參數: char* CompName 登錄資料:公司名 char* ProdName 登錄資料:產品名 char* UserName 登錄資料:使用者帳號 char* Password 登錄資料:使用者密碼 char* ProxyAddress 連線資料:PROXY位址,如果為空字串或為NULL,即為無PROXY int ProxyPort 連線資料:PROXY PORT,如果無PROXY ADDRESS,本值無效 char* CoreAddress 連線資料:Core位址,不可為空字串或為NULL int CorePort 連線資料:Core PORT,不可無效 HANDLE Handle 接收訊息的視窗的 Handle *回傳值: > 0 表建立Socket連線成功, 但不表示登入成功, <= 0 表示無法建立連線 */ //typedef int (__stdcall *ConnectRealProc)(char* comp, char* prod, char* user, char* pass, char* proxy_addr, int proxy_port, char* server_addr, int server_port, HANDLE hWnd, char* lpszProxyAccount=NULL, char* lpszProxyPassword=NULL); typedef int (__stdcall *ConnectRealProc)(char* comp, char* prod, char* user, char* pass, char* proxy_addr, int proxy_port, char* server_addr, int server_port, HANDLE hWnd); ///////////////////////////////////////////////////////////////////////////// /* DisconnectReal 切斷連線 *參數: 無 *回傳值: 無 */ typedef void (__stdcall *DisconnectRealProc)(void); ///////////////////////////////////////////////////////////////////////////// /* SubReal 訂閱頻道 *參數: char* channel 為欲訂閱之頻道,該字串需以 '\0' 結束 *回傳值: 為送出字串的字數,若為0表示失敗 */ typedef int (__stdcall *SubRealProc)(char* channel); ///////////////////////////////////////////////////////////////////////////// /* UnsubReal 取消訂閱頻道 *參數: char* channel 為欲取消訂閱之頻道,該字串需以 '\0' 結束 *回傳值: 為送出字串的字數,若為0表示失敗 */ typedef int (__stdcall *UnsubRealProc)(char* channel); ///////////////////////////////////////////////////////////////////////////// /* UnpackData 將資料解碼 *參數: char* dest 目的資料區段位置 int maxsize 目的資料區段長度 char* src 來源資料位置 int len 來源資料區段長度 *回傳值: -1表示目的資料區段長度不足, otherwise解碼後實際長度 目的資料以'\0'結束,回傳值的長度不包含此'\0' */ typedef int (__stdcall *UnpackDataProc)(char* buf, int buf_len, char* src, int len); ///////////////////////////////////////////////////////////////////////////// /* PackData 將資料編碼 參數: char* dest 目的資料區段位置 int maxsize 目的資料區段長度 char* src 來源資料位置 int len 來源資料區段長度 *回傳值: -1表示目的資料區段長度不足, otherwise解碼後實際長度 目的資料以'\0'結束,回傳值的長度不包含此'\0' */ typedef int (__stdcall *PackDataProc)(char* buf, int buf_len, char* src, int len); ///////////////////////////////////////////////////////////////////////////// /* UnpackBlock 將資料解碼(Block型態) *參數: char* dest 目的資料區段位置 char* msg 來源資料位置 int len 來源資料區段長度 *回傳值: 解碼後實際長度 目的資料以'\0'結束,回傳值的長度不包含此'\0' */ typedef int (__stdcall *UnpackBlockProc)(char *dest, char *msg, int len); ///////////////////////////////////////////////////////////////////////////// /* PackBlock 將資料編碼(Block型態) *參數: char* dest 目的資料區段位置 int size 目的資料區段長度 char* data 來源資料位置 int len 來源資料區段長度 *回傳值: 實際被編碼的資料長度 目的資料以'\0'結束,回傳值的長度不包含此'\0' */ typedef int (__stdcall *PackBlockProc)(char *dest, int size, char *msg, int len); ///////////////////////////////////////////////////////////////////////////// /* SubmitReal 上傳資料 *參數: char* channel 頻道,以'\0'結束 char* data 欲上傳的資料,以'\0'結束 *回傳值: 全部送出的資料長度,應該為 channel+data+2 */ typedef int (__stdcall *SubmitRealProc)(char* channel, char* data); ///////////////////////////////////////////////////////////////////////////// /* SubmitBlock 上傳 Block 型態資料(長度超過1020-Byte的資料) *參數為: char* ch 頻道,以'\0'結束 char* name 資料名稱,給AP利用來辨識資料,以'\0'結束 char* data 欲上傳的資料,以'\0'結束 int datalen 資料長度 *回傳值: 送出的資料長度,應該為 datalen */ typedef int (__stdcall *SubmitBlockProc)(char* ch, char* name, char* data, int datalen); ///////////////////////////////////////////////////////////////////////////// /* SetDelayTime 設定 SubmitBlock 發送資料延遲時間 *參數: int delay 延遲時間,單位為千分之一秒,不得小於10 *回傳值: 設定後,系統的延遲時間 */ typedef int (__stdcall *SetDelayTimeProc)(int delay); ///////////////////////////////////////////////////////////////////////////// /* SetBlockSize 設定 SubmitBlock 發送資料每一區段的最大長度 *參數為: int size 資料長度,單位 byte,有效值為16∼1012 *回傳值: 設定後,系統的區段長度 */ typedef int (__stdcall *SetBlockSizeProc)(int size); ///////////////////////////////////////////////////////////////////////////// /* SubmitSubject 上傳以subject作區別的資料 *參數為: char* subject 主題字串 char* data 傳送資料 int len 資料長度 *回傳值: 送出的資料長度 */ typedef int (__stdcall *SubmitSubjectProc)(char* subject, char* data, int len); ////////////////////////////////////////////////////////////////////////////// /* SubSubject 訂閱主題 *參數: char* subject 主題字串 *回傳值: 無 */ typedef void (__stdcall *SubSubjectProc)(char* subject); ////////////////////////////////////////////////////////////////////////////// /* UnsubSubject 解除訂閱主題 *參數: char* subject 主題字串 *回傳值: 無 */ typedef void (__stdcall *UnsubSubjectProc)(char* subject); //給 Client 端程式的訊息類別 //有資料進來,第一個參數是該資料頻道,第二參數是資料內容,兩參數皆有'\0'結束 #define WM_DATARECEIVED WM_USER+111 //連線完成,第一參數是目的 Server 的Address與Port如"210.244.30.100:8000" #define WM_CONNECTION_READY WM_USER+112 //連線中斷,第一參數為斷線原因的 Code,Agent隨後做連線嘗試,若失敗則送出WM_CONNECT_FAIL #define WM_CONNECTION_LOST WM_USER+113 //連線失敗,原因請參閱WM_CONNECTION_FAIL #define WM_CONNECTION_FAIL WM_USER+114 //對於命令的回應,參數的意義參閱WM_COMMAND_MESSAGE #define WM_COMMAND_MESSAGE WM_USER+115 //有 Block 資料進來,第一個參數是資料(資料結構請參閱 BlockDataStruct),第二參數無用 #define WM_BLOCKRECEIVED WM_USER+116 //資料接收錯誤 #define WM_DATARECEIVE_FAIL WM_USER+117 //接收到以subject區分的訊息 #define WM_SUBJECTRECEIVED WM_USER+118 //WM_CONNECTION_FAIL 訊息的第一個參數 #define CF_CONNECT_FAIL 0 //連線失敗,應嘗試下一個 iCore 位址 #define CF_LOGININFO_UNKNOWN 1 //尚未設定 login information #define CF_CORE_UNKNOWN 2 //尚未設定 iCore 位址 #define CF_SOCKET_CREATE_FAIL 3 //無法 create socket #define CF_PROXY_FAIL 4 //proxy 連線失敗 #define CF_CONNECT_UNREADY 5 //連線未完成,請稍後再作動作 #define CF_LOGIN_FAIL 6 //設定的 login information 無效 #define CF_PASSWORD_FAIL 7 //設定的 password 無效 #define CF_USER_UNKNOWN 8 //帳號無效 #define CF_CONNECT_LIMIT 9 //Connect Limit #define CF_PROXY_USERDATA_REQUIRE 10//Proxy need account & password //以下定義給 WM_COMMAND_MESSAGE 命令訊息類別作參數 #define CM_COMMAND_OK 0 //命令成功 #define CM_CHANNEL_INVALID 1 //頻道ID無效 #define CM_CHANNEL_OVERFLOW 2 //訂閱太多頻道 #define CM_CHANNEL_DUPLICATE 3 //頻道重複訂閱 #define CM_UNSUB_NONE 4 //欲取消訂閱的頻道並沒有訂閱 #define CM_CHANNEL_NOPERMISSION 5 //無權訂閱頻道 #define CM_SUBJECT_OK 20 //subject命令成功 #define CM_SUBJECT_INVALID 21 //subject無效 #define CM_SUBJECT_OVERFLOW 22 //訂閱太多subject #define CM_SUBJECT_DUPLICATE 23 //subject重複訂閱 #define CM_SUBJECT_UNSUB_NONE 24 //欲取消訂閱的subject並沒有訂閱 #define CM_SUBJECT_NOPERMISSION 25 //無權訂閱subject //以下定義給 WM_DATARECEIVE_FAIL 資料接收失敗做參數 #define DF_PARSE_ERROR 0 #define DF_PACKAGE_LOST 1 //Block 資料的結構 typedef struct { unsigned long channel; // 頻道 char strName[64];// 名稱 char *pData; // 資料區塊 UINT nSize; // 原始大小 UINT nDataLen; // 已收到的 size BYTE nNextCode; // 應收 Block Index ,Error 時使用 BYTE nRecvCode; // 收到的 Block Index,Error 使用 } BlockDataStruct;