一、前言
前一節解決了開發環境問題,這一節就進一步實現API登陸交易服務。
我們先簡要說明下API涉及的兩個類ITapTradeAPI和ITapTradeAPINotify,他們分別實現了“指令”和“回調消息”的功能。
ITapTradeAPI(指令):比如發送下單指令、登陸指令、撤單指令等。
ITapTradeAPINotify(回調消息):各種指令發送后的執行情況通過這個接口返回,比如登陸是否成功、下單結果如何,還有就是一些重要消息,比如連接是否成功、盈虧通知等。
實際上開發包里已經有一個很完備的demo,為了便於理解我就把它拆分成了好幾個小節,一步一步完成學習。
二、創建API實例
TapAPIApplicationInfo stAppInfo;
strcpy(stAppInfo.AuthCode, DEFAULT_AUTHCODE);
strcpy(stAppInfo.KeyOperationLogPath, "\\log");
ITapTradeAPI *pAPI = CreateITapTradeAPI(&stAppInfo, iResult);
這里的TapAPIApplicationInfo是一個存數據的結構體,主要包括“授權碼”、“日志存放路徑”、“斷線重連設置”
授權碼和測試用登陸賬戶、密碼在demo里都有。
最后通過CreateITapTradeAPI()函數創建了API的實例
三、為API實例指定消息回調
創建API實例后就可以做指令操作了,但指令的結果獲取是異步的,9.0API要求開發者繼承ITapTradeAPINotify這個類並自己實現其中的各種消息接口。
其實就是像上圖這樣,按ITapTradeAPINotify的接口要求定義好各種函數,在函數里寫你的代碼就行了,當有消息返回時就會根據消息的類型執行不同函數內的代碼。
然后你會發現函數前面都有個TAP_CDECL關鍵字,它定義是
含義為:若當前系統是windows的,TAP_CDECL = __cdecl,若為linux系統則此關鍵字沒有含義。具體含義可以百度下,反正我們是linux系統所以沒有作用。
各回調函數的說明在demo中有說明文檔,也可以在“iTapTradeAPI.h”文件中找到。定義好回調類后,還需要將API實例與回調實例關聯在一起。
Trade objTrade;
pAPI->SetAPINotify(&objTrade);
四、登陸測試
//設置服務器IP、端口
pAPI->SetHostAddress(DEFAULT_IP, DEFAULT_PORT);
//設置賬戶信息
TapAPITradeLoginAuth stLoginAuth;
memset(&stLoginAuth, 0, sizeof(stLoginAuth));
strcpy(stLoginAuth.UserNo, DEFAULT_USERNAME);
strcpy(stLoginAuth.Password, DEFAULT_PASSWORD);
stLoginAuth.ISModifyPassword = APIYNFLAG_NO;
//登陸
pAPI->Login(&stLoginAuth);
//等待回調消息
while(true){
}
最后為什么會是個while的死循環呢?因為整個過程都是異步的,發送登陸指令和登陸結果的消息通知是分開的,所以要在主進程里死循環等待,以后會介紹demo里的一個等待消息的方法。
執行效果如下:
五、回顧
簡單實現了登陸操作,但是把整體結構過了下,其實挺簡單的。
完整代碼:
https://share.weiyun.com/5szXtuo