#if !defined(TGATE_FTDCAPI_H)
#define TGATE_FTDCAPI_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#if defined(TGAPI_IS_LIB) && defined(WIN32)
#ifdef LIB_TG_API_EXPORT
#define TG_API_EXPORT __declspec(dllexport)
#else
#define TG_API_EXPORT __declspec(dllimport)
#endif
#else
#define TG_API_EXPORT 
#endif

#include "TGateFtdcApiStruct.h"

class CTGateFtdcSpi
{
public:
	///错误应答
	virtual void OnRspError(CTGateFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast) {};

	///服务地址参数查询响应
	virtual void OnRspQryTGIpAddrParam(CTGateFtdcTGIpAddrParamField* pTGIpAddrParam, CTGateFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast) {};
};


class TG_API_EXPORT CTGateFtdcApi
{
public:
	///创建TGApi
	static CTGateFtdcApi* CreateTGateFtdcApi();

	///获取API的版本信息
	///@retrun 获取到的版本号
	static const char* GetApiVersion();

	///删除接口对象本身
	///@remark 不再使用本接口对象时,调用该函数删除接口对象
	virtual void Release() = 0;

	///等待接口线程结束运行
	///@return 线程退出代码
	virtual int Join() = 0;

	///注册TGATE网络地址
	///@param pszTGAddress：TGATE网络地址。
	///@remark 网络地址的格式为：“protocol://ipaddress:port”，如：”tcp://127.0.0.1:17001”。 
	///@remark “tcp”代表传输协议，“127.0.0.1”代表服务器地址。”17001”代表服务器端口号。
	virtual void RegisterTGAddr(char* pszTGAddress) = 0;

	///注册回调接口
	///@param pSpi 派生自回调接口类的实例
	virtual void RegisterSpi(CTGateFtdcSpi* pSpi) = 0;

	///服务地址参数查询
	/// 返回值：
	/// -1：入参出错
	/// -2：超过在途流控
	/// -3：超过频率流控 
	virtual int ReqQryTGIpAddrParam(CTGateFtdcQryTGIpAddrParamField* pQryTGIpAddrParamField,int nRequestID) = 0;

protected:
	~CTGateFtdcApi() {};
};
#endif