⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 newapitest.c

📁 用c/c++实现的一个CMPP API
💻 C
📖 第 1 页 / 共 3 页
字号:
                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 + -