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; }
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; }
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; }