コード例 #1
0
ファイル: fmtrader.cpp プロジェクト: LMiceOrg/FemasTrader
int main(int argc, char* argv[]) {
    int ret = 0;

    // 产生一个 CUstpFtdcTraderApi 实例
    CUstpFtdcTraderApi *pTrader = CUstpFtdcTraderApi::CreateFtdcTraderApi("");
    g_puserapi=pTrader;

    CTraderSpi spi(pTrader);
    spi.Init();

    /** 注册一事件处理的实例 */
    pTrader->RegisterSpi(&spi);

    /** 设置飞马平台服务的地址 */
    // 可以注册多个地址备用
    spi.logging("register front addr: %s", spi.GetFrontAddr());
    pTrader->RegisterFront(spi.GetFrontAddr());
    /** 订阅私有流 */
    // USTP_TERT_RESTART:从本交易日开始重传
    // USTP_TERT_RESUME:从上次收到的续传
    // USTP_TERT_QUICK:只传送登录后私有流的内容
    pTrader->SubscribePrivateTopic(USTP_TERT_QUICK);
    /** 订阅公共流 */
    // USTP_TERT_RESTART:从本交易日开始重传
    // USTP_TERT_RESUME:从上次收到的续传
    // USTP_TERT_QUICK:只传送登录后公共流的内容
    pTrader->SubscribePublicTopic(USTP_TERT_QUICK);


    /** 使客户端开始与后台服务建立连接 */
    spi.logging("Init trader\n");
    const fmconf_t* cfg = spi.GetConf();
    lmice_warning_print("UserID=[%s],BrokerID=[%s],Password=[%s]\n", cfg->g_UserID,cfg->g_BrokerID,cfg->g_Password);
    pTrader->Init();



    /** Listen and wait to end */
    signal(SIGINT, signal_handler);
    /*signal(SIGCHLD,SIG_IGN);  ignore child */
    /* signal(SIGTSTP,SIG_IGN);  ignore tty signals */
    signal(SIGTERM,signal_handler); /* catch kill signal */

    while(1) {
        if(g_quit_flag == 1) {
            break;
        }
        usleep(500000);
    }

    pTrader->Release();

    lmice_warning_print("Release\n");

    return 0;
}
コード例 #2
0
ファイル: testapi.cpp プロジェクト: wfay/qtst
void* trade_main(void*)
{

	//init
    printf("entering trade main\n");
/*
    QVariant returnedValue;
    QVariant msg = "Hello from C++";
    QMetaObject::invokeMethod(object, "myQmlFunction",
    Q_ARG(QVariant, msg));
    qDebug() << "QML function returned:" << returnedValue.toString();
*/

    memset(g_frontaddr,0,BUFLEN);
    strcpy(g_frontaddr,"tcp://117.185.125.4:17198");
    strcpy(g_BrokerID,"1004");
    strcpy(g_UserID,"0193764301");
    strcpy(g_Password,"71de26b5ad29d562cfe07814e8c80974");
	printf("Input g_BrokerID=[%s]g_UserID=[%s]g_Password=[%s]\n",g_BrokerID,g_UserID,g_Password);
 //   getchar();
	CUstpFtdcTraderApi *pTrader = CUstpFtdcTraderApi::CreateFtdcTraderApi("");	
	g_puserapi=pTrader;

 	CTraderSpi spi(pTrader);
 	pTrader->RegisterFront(g_frontaddr);	
    pTrader->SubscribePrivateTopic(USTP_TERT_RESUME);
    pTrader->SubscribePublicTopic(USTP_TERT_RESUME);
	pTrader->RegisterSpi(&spi);
    pTrader->Init();

    pTrader->Join();
    pTrader->Release();


	return 0;
}
コード例 #3
0
ファイル: fm2trader.cpp プロジェクト: LMiceOrg/FemasTrader
int main(int argc, char* argv[]) {
    int ret = 0;
    int i;
    char* cmd;
    char front_address[64] = "10.0.10.0";
    char user[64] = "";
    char password[64] = "";
    char broker[64] = "";
    char model_name[32]="fm2trader";
    char *investor = user;
    char exchange_id[32]= "SHIF";

    /// 解析命令行
    for(i=1; i<argc; ++i) {
        cmd = argv[i];
        if(strcmp(cmd, "-h") == 0 ||
                strcmp(cmd, "--help") == 0) {
            print_usage();
            return 0;
        } else if(strcmp(cmd, "-f") == 0 ||
                  strcmp(cmd, "--front") == 0) {
            if(i+1 < argc) {
                cmd = argv[i+1];
                memset(front_address, 0, sizeof(front_address));
                strncpy(front_address, cmd, sizeof(front_address)-1);
            } else {
                lmice_error_print("Command(%s) require front address string\n", cmd);
                return 1;
            }
        } else if(strcmp(cmd, "-u") == 0 ||
                  strcmp(cmd, "--user") == 0) {
            if(i+1 < argc) {
                cmd = argv[i+1];
                memset(user, 0, sizeof(user));
                strncpy(user, cmd, sizeof(user)-1);
                //投资人ID= 用户ID[去除前面的交易商ID]
                investor = user + strlen(broker);
            } else {
                lmice_error_print("Command(%s) require user id string\n", cmd);
                return 1;
            }
        } else if(strcmp(cmd, "-p") == 0 ||
                  strcmp(cmd, "--password") == 0) {
            if(i+1 < argc) {
                cmd = argv[i+1];
                memset(password, 0, sizeof(password));
                strncpy(password, cmd, sizeof(password)-1);
            } else {
                lmice_error_print("Command(%s) require password string\n", cmd);
                return 1;
            }
        } else if(strcmp(cmd, "-b") == 0 ||
                  strcmp(cmd, "--broker") == 0) {
            if(i+1 < argc) {
                cmd = argv[i+1];
                memset(broker, 0, sizeof(broker));
                strncpy(broker, cmd, sizeof(broker)-1);
                //投资人ID= 用户ID[去除前面的交易商ID]
                investor = user + strlen(broker);
            } else {
                lmice_error_print("Command(%s) require broker string\n", cmd);
                return 1;
            }
        } else if(strcmp(cmd, "-e") == 0 ||
                  strcmp(cmd, "--exchange") == 0) {
            if(i+1 < argc) {
                cmd = argv[i+1];
                memset(exchange_id, 0, sizeof(exchange_id));
                strncpy(exchange_id, cmd, sizeof(exchange_id)-1);
            } else {
                lmice_error_print("Command(%s) require exchange id string\n", cmd);
                return 1;
            }
        } else if(strcmp(cmd, "-n") == 0 ||
                  strcmp(cmd, "--name") == 0) {
            if(i+1 < argc) {
                cmd = argv[i+1];
                memset(model_name, 0, sizeof(model_name));
                strncpy(model_name, cmd, sizeof(model_name)-1);
            } else {
                lmice_error_print("Command(%s) require model name string\n", cmd);
                return 1;
            }
        } else if(strcmp(cmd, "-c") == 0 ||
                  strcmp(cmd, "--cpuset") == 0) {
            if(i+1 < argc) {
                int cpuset[8];
                int setcount = 0;
                cmd = argv[i+1];

                do {
                    if(setcount >=8)
                        break;
                    cpuset[setcount] = atoi(cmd);
                    ++setcount;
                    while(*cmd != 0) {
                        if(*cmd != ',') {
                            ++cmd;
                        } else {
                            ++cmd;
                            break;
                        }
                    }
                } while(*cmd != 0);

                ret = lmspi_cpuset(NULL, cpuset, setcount);
                lmice_critical_print("set CPUset %d return %d\n", setcount, ret);

            } else {
                lmice_error_print("Command(%s) require cpuset param, separated by comma(,)\n", cmd);
            }
            ++i;
        }
    }

    /// 注册SPI

    // 产生一个 CUstpFtdcTraderApi 实例
    CUstpFtdcTraderApi *pt = CUstpFtdcTraderApi::CreateFtdcTraderApi("");
    //产生一个事件处理的实例
    CFemas2TraderSpi * spi = new CFemas2TraderSpi(pt, model_name);

    // 设置交易信息
    spi->user_id(user);
    spi->password(password);
    spi->broker_id(broker);
    spi->investor_id(investor);
    spi->front_address(front_address);
    spi->model_name(model_name);
    spi->exchange_id(exchange_id);

    spi->init_trader();

    // 注册一事件处理的实例
    pt->RegisterSpi(spi);

    // 订阅私有流
    //        TERT_RESTART:从本交易日开始重传
    //        TERT_RESUME:从上次收到的续传
    //        TERT_QUICK:只传送登录后私有流的内容
    pt->SubscribePrivateTopic( USTP_TERT_QUICK );
    pt->SubscribePublicTopic ( USTP_TERT_QUICK );

    //设置心跳超时时间
    pt->SetHeartbeatTimeout(5);

    //注册前置机网络地址
    pt->RegisterFront(front_address);

    //初始化
    pt->Init();

    /// 开始运行
    spi->join();

    // 释放useapi实例
    pt->Release();

    //释放SPI实例
    delete spi;

    return 0;
}