/////////////////////////////////////////////////////////////////////////////
/*
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;