📄 newapitest.c
字号:
printf("submit result =%u\n",nResult); } grecConnect[nConnNo].nSendSuccNum[nThreadNo]++; } else if(nRet == API_ERR_TIMEOUT) { grecConnect[nConnNo].nSendFailTimeOut[nThreadNo]++; } else { printf("%s",sGetErrorDetail()); grecConnect[nConnNo].nSendFailNum[nThreadNo]++; if( grecConfig.nHighLevel == 1) { nRet = nHExitInterface(); } else { nRet = nExitInterface(grecConnect[nConnNo].CONNFD); } if(nRet < 0 ) { printf("Conn no %d,ExitInterface Fail!\n",nConnNo); return NULL; } grecConnect[nConnNo].nConnectFlag = M_EXIT; nRet = nReInitInterface(nConnNo); if(nRet < 0 ) { printf("Conn no %d,nReInitInterface Fail Exit!\n",nConnNo); return NULL; } } nSendPacketNum++; time(&timetCurrent); if(timetCurrent - timetLast >= ShowInterval) { //printf("send total num = %d\n",nSendPacketNum); // printf("Conn no %d: SendSuccNum = %d RecvDeliverNum = %d , RecvReceiptNum = %d\n\n", printf("Conn %d Send Thread %d: SendSuccNum = %d \n\n", grecConnect[nConnNo].nConnNo, nThreadId, grecConnect[nConnNo].nSendSuccNum[nThreadNo]); //grecConnect[nConnNo].nRecvDeliverNum[nThreadNo], //grecConnect[nConnNo].nRecvReceiptNum[nThreadNo] ); timetLast = timetCurrent; } } return NULL;}void *vRecvPkg(void *rThread){ int nConnNo; int nThreadNo; time_t timetLast; time_t timetCurrent; recCmppDeliver myDeliver; recCmppReceiptBody myReceiptBody; int nReceiptOrNot; int nRet; int nSequence; int nThreadId; recCmppDeliverResp myDeliverResp; RecThreadPara *rThreadPara; //初始化 //pthread_detach(pthread_self()); rThreadPara = (RecThreadPara *)rThread; nConnNo = rThreadPara->nConnNo; nThreadNo = rThreadPara->nThreadNo; //nConnNo = *(int *)nNum; gnThreadStartFlag = 1; timetLast = 0; timetCurrent = 0; nThreadId = pthread_self(); if(nConnNo >= MaxConnectPairs || nConnNo != grecConnect[nConnNo].nConnNo ) { printf("recv thread exit ! conn no is not correct\n\n"); return NULL; } time(&timetLast); time(&grecConnect[nConnNo].timetRecvBegin); grecConnect[nConnNo].timetRecvEnd = grecConnect[nConnNo].timetRecvBegin; //收包循环 while(1) { if( (timetCurrent - grecConnect[nConnNo].timetRecvEnd ) > grecConfig.nMaxTimeOut ) { printf("Conn %d,recv thread %d exit by time out\n", nConnNo,nThreadId); return NULL; } //Ctrl+C退出 if(gnExitAllThread) { printf("recv thread exit by Ctrl+c !,thead no = %d\n\n",nConnNo); return NULL; } if(grecConnect[nConnNo].nConnectFlag != M_INITED ) { usleep(10); continue; } //收包 memset(&myReceiptBody , 0 , sizeof(myReceiptBody)); memset(&myDeliver , 0 , sizeof(myDeliver)); if(grecConfig.nHighLevel == 1) { nRet = nHGetDeliver(&nReceiptOrNot, &nSequence, &myDeliver, &myReceiptBody, 10 ); } else { nRet = nGetDeliver(grecConnect[nConnNo].CONNFD, &nReceiptOrNot, &nSequence, &myDeliver, &myReceiptBody, 10 ); } if(nRet == API_NOCELL) { usleep(10); } else if( nRet == API_OK) { /* memset(&myDeliverResp, 0 , sizeof(myDeliverResp)); memcpy(myDeliverResp.uchMsgId ,myDeliver.uchMsgId,MacMsgId); myDeliverResp.ucResult = 0; nRet = nSendDeliverResponse(grecConnect[nConnNo].CONNFD, nSequence, &myDeliverResp ); printf("nSendDeliverResponse return %d\n",nRet); */ grecConnect[nConnNo].nRecvDeliverNum[nThreadNo]++; if(grecConfig.nShowPacket == 1) { vPrintDeliver(myDeliver); } if( nReceiptOrNot == I_RECEIPT) { grecConnect[nConnNo].nRecvReceiptNum[nThreadNo]++; if(grecConfig.nShowPacket == 1) { vPrintReceipt(myReceiptBody); } } time(&grecConnect[nConnNo].timetRecvEnd); }else { printf("get deliver return %d\n",nRet); usleep(10); } //隔showinterval时间显示 time(&timetCurrent); if(timetCurrent - timetLast >= ShowInterval) { printf("Conn %d,Recv Thread %d: RecvDeliverNum = %d , RecvReceiptNum = %d\n\n",// printf("Conn no %d: SendSuccNum = %d RecvDeliverNum = %d , RecvReceiptNum = %d\n\n", grecConnect[nConnNo].nConnNo, nThreadId, //grecConnect[nConnNo].nSendSuccNum[nThreadNo], grecConnect[nConnNo].nRecvDeliverNum[nThreadNo], grecConnect[nConnNo].nRecvReceiptNum[nThreadNo] ); timetLast = timetCurrent; } } return NULL;}void *vKillThread(){ /* int i; int nRet; int j;*/ gnExitAllThread = 1; /* for(i=0; i < grecConfig.nNrOfConnect; i++ ) { for(j = 0 ; j <grecConnect[i].nSendThreadNum ; j++) { nRet = pthread_cancel(grecConnect[i].nSendThreadId[j]); if(nRet != 0) { printf("\t fail to cancel send packet thread No %d\n\n",i); } } for(j = 0 ; j <grecConnect[i].nRecvThreadNum ; j++) { nRet = pthread_cancel(grecConnect[i].nRecvThreadId[j]); if(nRet != 0) { printf("\t fail to cancel receive packet thread No %d\n\n",i); } } } */ printf("kill thread succ!\n\n"); return NULL;}int nReadConfig(char *psConfigFile){ char sConfigName[50]; char sSectionName[50]; char sTemp[20]; FILE *fp; int nLen; int i; if(NULL == psConfigFile) { printf("read config file fail! ps \n\n"); return -1; } //初始化 memset(sTemp, 0 , sizeof(sTemp)); memset(sConfigName , 0 , sizeof(sConfigName)); memset(sSectionName , 0 , sizeof(sSectionName)); //Read Main Section Config snprintf(sSectionName,sizeof(sSectionName),"%s","Main"); snprintf(sConfigName,sizeof(sConfigName),"%s","ConnectNum"); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConfig.nNrOfConnect) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } snprintf(sConfigName,sizeof(sConfigName),"%s","nShowPacket"); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConfig.nShowPacket) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } snprintf(sConfigName,sizeof(sConfigName),"%s","nMaxTimeOut"); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConfig.nMaxTimeOut) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } snprintf(sConfigName,sizeof(sConfigName),"%s","nHighLevel"); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConfig.nHighLevel) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } //read conn section snprintf(sSectionName,sizeof(sSectionName),"%s","Conn"); for(i = 0 ; i< grecConfig.nNrOfConnect ; i++) { //HostAddr snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","HostAddr",i); if( NULL == sCfgsReadString(psConfigFile, sSectionName, sConfigName, grecConnect[i].sHostAddr, sizeof(grecConnect[i].sHostAddr)) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } vCfgsATrim(grecConnect[i].sHostAddr); //HostPort snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","HostPort",i); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConnect[i].nHostPort) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } //Spid snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","Spid",i); if( NULL == sCfgsReadString(psConfigFile, sSectionName, sConfigName, grecConnect[i].Spid, sizeof(grecConnect[i].Spid)) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } vCfgsATrim(grecConnect[i].Spid); //sMsgSrc snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","sMsgSrc",i); if( NULL == sCfgsReadString(psConfigFile, sSectionName, sConfigName, grecConnect[i].sMsgSrc, sizeof(grecConnect[i].sMsgSrc)) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } vCfgsATrim(grecConnect[i].sMsgSrc); //SpPwd snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","SpPwd",i); if( NULL == sCfgsReadString(psConfigFile, sSectionName, sConfigName, grecConnect[i].SpPwd, sizeof(grecConnect[i].SpPwd)) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } vCfgsATrim(grecConnect[i].SpPwd); //sSrcTermId snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","sSrcTermId",i); if( NULL == sCfgsReadString(psConfigFile, sSectionName, sConfigName, grecConnect[i].sSrcTermId, sizeof(grecConnect[i].sSrcTermId)) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } vCfgsATrim(grecConnect[i].sSrcTermId); //sServiceId snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","sServiceId",i); if( NULL == sCfgsReadString(psConfigFile, sSectionName, sConfigName, grecConnect[i].sServiceId, sizeof(grecConnect[i].sServiceId)) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } vCfgsATrim(grecConnect[i].sServiceId); //nSendThreadNum snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","nSendThreadNum",i); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConnect[i].nSendThreadNum) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } //nRecvThreadNum snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","nRecvThreadNum",i); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConnect[i].nRecvThreadNum) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } //nSendSubmitNum snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","nSendSubmitNum",i); if( NULL == sCfgsReadString(psConfigFile, sSectionName, sConfigName, sTemp, sizeof(sTemp)) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; } grecConnect[i].nSendSubmitNum = atol(sTemp); //TimeOut snprintf(sConfigName,sizeof(sConfigName),"%s[%d]","nTimeOut",i); if( NULL == sCfgsReadNumber( psConfigFile, sSectionName, sConfigName, &grecConnect[i].nTimeOut) ) { printf("Config read %s from %s section fail!\n\n",sConfigName,sSectionName); return -1; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -