#ifndef __GT_CORE_TRADING_H__
#define __GT_CORE_TRADING_H__
#include "gtstruct.h"

class GtTrading
{
    public:
        virtual ~GtTrading();
        static GtTrading *instance();

        /************************************************************
        *功能：连接交易服务器
        *输入：tradingCode=交易码
        *输出：无
        *返回：!=0错误
        *请求报文数据：
        *1）服务器IP
        *2）服务器端口
        *3）终端ID
        *4）操作员ID
        *5）离线模式
        *应答报文数据：
        *无
        */
        int t100000ConnectServer(unsigned long tradingCode);

        /************************************************************
        *功能：获取通讯加密密匙
        *输入：tradingCode=交易码
        *输出：无
        *返回：!=0错误
        *请求报文数据：
        *1）本地密钥公匙
        *应答报文数据：
        *1）通信加密密匙
        *2）通信加密类型
        */
        int t101000CommEncryptKey(unsigned long tradingCode);

        /************************************************************
        *功能：终端登录
        *输入：tradingCode=交易码
        *输出：无
        *返回：!=0错误
        *请求报文数据：
        *1）操作员认证方式
        *2）操作员认证码
        *3）投注机认证方式
        *4）投注机认证码
        *应答报文数据：
        *1）用户权限级别
        *2）投注机认证码
        */
        int t101001TerminalLogin(unsigned long tradingCode);

        /************************************************************
        *功能：终端登出
        *输入：tradingCode=交易码
        *输出：无
        *返回：!=0错误
        *请求报文数据：
        *无
        *应答报文数据：
        *无
        */
        int t101002TerminalLogout(unsigned long tradingCode);

        /************************************************************
        *功能：获取终端控制参数
        *输入：tradingCode=交易码
        *输出：无
        *返回：!=0错误
        *请求报文数据：
        *无
        *应答报文数据：
        *1）系统备份标记
        *2）强制通信线路
        *3）数据链路模式
        *4）心跳时间间隔
        *5）数据链路保持联接时间
        *6）服务器时间
        *7）文件下载标记
        *8）打印机切纸模式
        *9）是否打印兑奖单
        *10）是否打印注销单
        *11）是否打印冲正单
        *12）是否支持半票确认功能
        *13）交易确认级别
        *14）游戏个数
        *15）游戏ID串
        *16）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *17）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *18）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *19）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *20）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *21）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *22）操作员认证方式
        *23）投注机认证方式
        *24）即时消息标记
        *25）单票保护金额
        *26）管理员密码
        *27）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *28）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *29）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *30）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *31）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        *32）编号|线路类型|线路名称|拨号号码|用户|密码|DNS1|DNS2|域名|IP1|IP2|IP3|IP4|PORT1|PORT2|PORT3|PORT4|
        */
        int t101027GetControlInfo(unsigned long tradingCode);

        /************************************************************
        *功能：同步服务器时间
        *输入：tradingCode=交易码
        *输出：cTime=服务器时间
        *返回：!=0错误
        *请求报文数据：
        *无
        *应答报文数据：
        *1）服务器时间（time_t）
        */
        int t101025GetServerTime(unsigned long tradingCode, time_t *cTime);

        /************************************************************
        *功能：终端升级包下载成功
        *输入：tradingCode=交易码
        *输出：无
        *返回：!=0错误
        *请求报文数据：
        *无
        *应答报文数据：
        *无
        */
        int t101023AppUpgradeCompleted(unsigned long tradingCode);

    private:
        GtTrading();
        static GtTrading *_instance;
        /************************************************************
        *功能：调用交易网络对数据进行请求与应答，串行阻塞模式
        *输入：tradingCode=交易码
        *输入：inData=请求数据
        *输入：inLen=请求数据长度
        *输出：outData=应答数据
        *输出：outLen=应答数据长度
        *返回：!=0错误
        */
        int callNetwork(unsigned long tradingCode, unsigned char *inData, int inLen, unsigned char *outData, int *outLen);
};

#endif
