📄 isap_client.cpp
字号:
fprintf(myfp,"[run in main process to fork %d]\n",process_num);
while (process_num>=global_num){/*p_nanosleep(RECONNDBWAIT * 1000000);*/}
if (process_num<global_num)
{
refork:
child_pid=fork(); //add by mmx
if (child_pid==0) //add by mmx
{ //add by mmx
//ConnectLabel:
// printf("[run into child process %d]\n",process_num);
while(clientTcp.connect() != 0)
{
if(runmode == DEBUG_MODE)
{
// printf("Msg:Can't connect OBS server.\n");
printf("Msg:Tring to connect OBS server.\n");
}
p_nanosleep((long)10 * 1e6);//wait for 10 second
if (runmode == DEBUG_MODE)
printf("sleep.......3\n");
}
if(runmode == DEBUG_MODE)
{
printf("Msg:Connected OBS server.\n");
}
sendPacket.setAuth(current_sid,current_sid,
clientCfg.repeat,nSubCode); //add by crt & mmx reset sender_id,recive_id
time(&sj);
mytime=localtime(&sj);
fprintf(myfp,"[%d-%d-%d %d:%d:%02d]\n",
mytime->tm_year+1900,mytime->tm_mon+1,mytime->tm_mday,mytime->tm_hour,mytime->tm_min,mytime->tm_sec);
if( runmode == DEBUG_MODE)
sendPacket.print();
sendPacket.print((FILE *) myfp);
sendPacket.serialize((u_char*) &packetBuf,PACKETLEN,nOcts);
sendPacket.clearAll();
// fprintf(myfp,"[111 run in main process to fork %d]\n",process_num);
clientTcp.send(packetBuf,nOcts,nsendOcts);
memset(packetBuf,0,PACKETLEN);
cRecvBuf=packetBuf;
nrecvOcts=recvPacket.getPacketHeadSize();
nresult=-1;
recvPacket.clearAll();
nrespstatus=NORESPONSE;
for(int i=0;i<MAXRESPONSEWAIT;i++)
{
if(clientTcp.recv(cRecvBuf,PACKETLEN,nrecvOcts)!=-1){
recvPacket.unserialize((u_char *) cRecvBuf,nrecvOcts);
if(runmode == DEBUG_MODE){
printf("PRINT RECEIVED PACKAGE...\n");
recvPacket.print();
}
time(&sj);
mytime=localtime(&sj);
fprintf(myfp,"[%d-%d-%d %d:%d:%02d]\n",
mytime->tm_year+1900,mytime->tm_mon+1,mytime->tm_mday,mytime->tm_hour,mytime->tm_min,mytime->tm_sec);
recvPacket.print((FILE *) myfp);
fprintf(myfp,"==============================================================================================\n\n");
recvPacket.getID(recvpacketid);
if(sendpacketid==recvpacketid)
{
nrespstatus=HASRESPONSE;
break;
}
}
else
{/*p_nanosleep(CLIENTRECVWAIT * 1000000);*/
p_nanosleep(CLIENTRECVWAIT * 100000);
if (runmode == DEBUG_MODE)
printf("sleep.......1\n");
}
}
// to disconnect
if(clientTcp.disconnect()==-1){
if(runmode == DEBUG_MODE)
printf("Msg:Close connection failure.\n");
//return 0 ;//????
}
else
if(runmode == DEBUG_MODE)
printf("Msg:Closed OBS server connection.\n");
{
COBSClientDB clientDB;
clientDB.setDB(dbuser,dbpasswd,dbhost);
while(1)
{
if(!clientDB.initDB()) //Connect to DB in child process //add by crt & mmx
{ p_nanosleep(CLIENTRECVWAIT * 100000);
if(runmode == DEBUG_MODE)
printf("Msg:Can't connect DB.\n");
// return 0;
}
else
if(runmode == DEBUG_MODE)
{printf("Msg:reConnected Database.\n");
break;
}
}
memcpy(clientDB.cBusinessID,_tmp_BusinessID,strlen(_tmp_BusinessID)+1); //Restore clientDB.cBusinessID //add by mmx &crt
printf("clientDB.cBusinessID is %s,_tmp_BusinessID is %s\n",clientDB.cBusinessID,_tmp_BusinessID);
if(nrespstatus==HASRESPONSE)
{
getReponsetResult(recvPacket,nresult,nerrorcode,clientDB);
if(runmode == DEBUG_MODE)
printf("nresult=%d,nerrorcode=%d\n",nresult,nerrorcode);
if(nresult==0)
clientDB.setProcessedStatus();
else
clientDB.setFailureStatus(nerrorcode);
}
else if(nrespstatus==NORESPONSE)
clientDB.setTimeOutStatus();
if(clientTcp.disconnect()==-1){
if(runmode == DEBUG_MODE)
printf("Msg:Close connection failure.\n");
//return 0 ;//????
}
else
if(runmode == DEBUG_MODE)
printf("Msg:Closed OBS server connection.\n");
}
p_nanosleep(CLIENTRECVWAIT * 200000); //add by crt wait for disconnect
exit(0); //add by mmx
}
else if ( child_pid<0)
{sleep(1);
goto refork;}
else
{ process_num++; //add by mmx
current_sid++; // add by crt
if (current_sid>max_sid) current_sid=min_sid;
}
} //add by mmx
fclose(myfp);
}
return 1;
}
int readCfgInfo(const char* cCfgFile,OBSCfgInfo &obsclient)
{
FILE *pCfgFile=NULL;
char *cSep=(char*)" =\t";
char cBuf[1024];
char *cName=NULL,*cValue=NULL;
memset(obsclient.ipaddr,0,sizeof(obsclient.ipaddr));
obsclient.port=0;
obsclient.id=0;
obsclient.sender=0;
obsclient.recver=0;
obsclient.repeat=0;
obsclient.sendwait=0;
obsclient.recvwait=0;
if((pCfgFile=fopen(cCfgFile,"r"))==NULL)
return 0;
while(fgets(cBuf,1024,pCfgFile)!=NULL)
{
cName=strtok(cBuf,cSep);
cValue=strtok(NULL,cSep);
if(cName!=NULL && cValue!=NULL)
{
if(strncmp(cBuf,SERVERIPADDR,strlen(SERVERIPADDR))==0)
memcpy(obsclient.ipaddr,cValue,strlen(cValue)+1);
else if(strncmp(cBuf,SERVERPORT,strlen(SERVERPORT))==0)
obsclient.port=atoi(cValue);
else if(strncmp(cBuf,CLIENTID,strlen(CLIENTID))==0)
obsclient.id=atoi(cValue);
else if(strncmp(cBuf,SENDER,strlen(SENDER))==0)
obsclient.sender=atoi(cValue);
else if(strncmp(cBuf,RECVER,strlen(RECVER))==0)
obsclient.recver=atoi(cValue);
else if(strncmp(cBuf,REPEAT,strlen(REPEAT))==0)
obsclient.repeat=atoi(cValue);
else if(strncmp(cBuf,SENDWAIT,strlen(SENDWAIT))==0)
obsclient.sendwait=atoi(cValue);
else if(strncmp(cBuf,RECVWAIT,strlen(RECVWAIT))==0)
obsclient.recvwait=atoi(cValue);
else if(strncmp(cBuf,GLOBAL_NUM,strlen(GLOBAL_NUM))==0)
obsclient.global_num=atoi(cValue);
else if(strncmp(cBuf,MIN_SID,strlen(MIN_SID))==0)
obsclient.min_sid=atoi(cValue);
else if(strncmp(cBuf,MAX_SID,strlen(MAX_SID))==0)
obsclient.max_sid=atoi(cValue);
}
}
if(obsclient.port==0 || strlen(obsclient.ipaddr)==0)
return 0;
return 1;
}
int readDHCS(const char* cFileName,char* cUser,
char* cPasswd,char* cHostString)
{
return 1;
}
#define ARRAYLEN 1024
int getReponsetResult(CSamPacket &response,long &result,long &errorCode,COBSClientDB &clientDB)
{
CSamAttrList *pObsList=NULL;
CSamRtbDict *pObsDict=NULL;
CSamAttr *pObsAttr=NULL;
u_long attrcode;
int format;
int len;
u_char vp[ARRAYLEN];
char code[4];
char cValue[ARRAYLEN+1];
long lValue;
int setResult=0;
u_char p[ARRAYLEN];
response.getAttrList(pObsList);
response.getDict(pObsDict);
if(pObsList==NULL || pObsDict==NULL){
printf("Msg:Can't get response result.\n");
return 0;
}
pObsList->setDict(pObsDict);
pObsAttr=pObsList->find(RESPONSERESULT);
if(pObsAttr!=NULL){
pObsAttr->getValue(len,(u_char*) &p);
if(len!=0)
{memcpy((long*) &result,p,sizeof(long));}
else
return 0;
}
pObsAttr=pObsList->find(ERRORCODE);
if(pObsAttr!=NULL){
pObsAttr->getValue(len,(u_char*) p);
if(len!=0)
{memcpy((long*) &errorCode,p,sizeof(long));}
else
return 0;
}
if(pObsList!=NULL)
{
pObsAttr=pObsList->pHead;
while(pObsAttr!=NULL)
{
attrcode=0;
if(!pObsAttr->get(attrcode,format,len,vp))
{
if(attrcode==RESPONSERESULT || attrcode==ERRORCODE)
{
if (pObsAttr->pNext!=NULL)
pObsAttr=pObsAttr->pNext;
else
break;
continue;
}
memset(cValue,0,sizeof(cValue));
lValue=0;
sprintf(code,"%d",attrcode);
//if (format==0) memcpy((char*) &cValue,vp,sizeof(cValue));
if (format==0) memcpy((char*) &cValue,vp,len);
else if(format==1)
{
memcpy((long*) &lValue,vp,sizeof(lValue));
sprintf(cValue,"%ld",lValue);
}
//if (attrcode==105 || attrcode=106 || attrcode=107)
if (format==0 && strlen(cValue)==0)
{
pObsAttr->getValue(len,(u_char*) &p);
if(len!=0)
{
memcpy((char *) &cValue,p,len);
}
}
if(!(setResult=clientDB.setReponseResult((char*) &code,(char *) &cValue,format)))
break;
}
if (pObsAttr->pNext!=NULL)
pObsAttr=pObsAttr->pNext;
else
break;
}
if(setResult)
clientDB.commitDB();
else
clientDB.rollbackDB();
//pObsAttr->clearAll();
};
return 1;
}
void getStopSignal(int s)
{
if(runmode == DEBUG_MODE)
printf("Msg:OBS client exit.\n");
deletePidFile((char* ) PIDFILE);
if(g_childpid != -1)
{
printf("parent process receive signal, kill child...\n");
::kill(g_childpid, SIGKILL);
}
else
{
printf("child process receive signal, exit.\n");
exit(1);
}
}
void backJob(int s)
{
if(runmode == DEBUG_MODE)
printf("Msg:OBS client stop job.\n");
deletePidFile((char* ) PIDFILE);
if(g_childpid != -1)
{
printf("parent process receive signal, kill child...\n");
::kill(g_childpid, SIGKILL);
}
else
{
printf("child process receive signal, exit.\n");
exit(-1);
}
//exit(-1);
}
void usage(const char* appName)
{
printf("Usage: %s|-d|-b|-h\n",appName);
printf("\t-d Dubug mode.\n");
printf("\t-b Back ground mode.\n");
printf("\t-h Usage help.\n");
}
int writePidFile(char* fileName,pid_t pid)
{
FILE *pidfile=NULL;
if((pidfile = fopen(fileName,"wr")) == 0)
{
if (runmode == DEBUG_MODE)
printf("Msg:Can't create pid file.\n");
return 0;
}
fprintf(pidfile,"%d",pid);
fclose(pidfile);
return 1;
}
int deletePidFile(char* fileName)
{
if(remove(fileName) != 0)
if(runmode == DEBUG_MODE)
return 0;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -