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

📄 isap_client.cpp.bak

📁 unix环境下的多进程方式应用程序编程示例应用
💻 BAK
📖 第 1 页 / 共 2 页
字号:
        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();           
      	break;
      }	
	if(DBStatus==DBFAILURE)
	{
		p_nanosleep(RECONNDBWAIT * 1000000);
		if (runmode == DEBUG_MODE)
		   printf("sleep.......2\n");      
	}
        
      //p_nanosleep(DBSEARCHWAIT);
    }
      while (process_num>=global_num){};
      if (process_num<global_num)
      {
      child_pid=fork();     //add by mmx
      if (child_pid==0)     //add by mmx
      {                     //add by mmx
//ConnectLabel:
	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(10 * 1e6);//wait for 10 second
		if (runmode == DEBUG_MODE)
		   printf("sleep.......3\n");
	}
	
	if(runmode == DEBUG_MODE)
	{
		printf("Msg:Connected OBS server.\n");
	}
	
      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 * 200000);
          if (runmode == DEBUG_MODE)
             printf("sleep.......1\n");
         }
      }
      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"); 
   exit(0);    //add by mmx 
   }
   else   {	global_num++; }           //add by mmx 
   }           //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);     
    }	
  }
   
   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 + -