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

📄 ctuxedothread.cpp

📁 调用tuxedo服务的dll库的源代码。其中用到了c++ qt 库4.3。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			  m_msgDesc.sprintf("Tperrno = %d.",tperrno);
			  r=tperrno;
			  if(r==6)
			  {
                  m_msgDesc=m_msgDesc + "The service name does not exist";
			  }
			  else if(r==12)
			  {
				  m_msgDesc=m_msgDesc + "Network error or invalid wsdn";
				  g_bNeedReconn=true;
				//  bWait=g_WaitCondi.wait( &g_Mutex,60000);

				  /*
				  if(!bTriedReInit)
				  { 
				     
					  fun.tpterm();
					  g_bInited=false;
					  g_bIniting=true;
					  r=RunInit();
				      bTriedReInit=true;
					  
				      if(!r)
				        goto CallAgain;
						
				  }
				  */
              }
			  else
			  {   tpErrDes=fun.tpstrerror(tperrno);
                  m_msgDesc=m_msgDesc+tpErrDes;
			  }
			  
              m_msgID=MSG_TUX_CALL_FAILED;
			 /* QString ttt=m_SrvName;
			  m_msgDesc="service name:"+ ttt + " "+ m_msgDesc;
			  QByteArray ba= m_msgDesc.toAscii();
			  MessageBoxA( NULL,ba.data() ,"CALL FAILED",MB_OK);*/
       }
	   else
	   {
		 
           	m_msgDesc=*(char *)m_pRcvBufFML;//m_outputBuf;
			m_msgID=MSG_TUX_CALL_OK;
			//MessageBoxA(NULL,"CALLOK","",MB_OK);
			r=0;
			

	   }
	   //fun.tpterm();
	  
	 //  g_Mutex.unlock();
       char cTemp[302];
	   m_ErrID=r;
        if (m_bAsync)
		{   if(g_hWnd)
			{
				QByteArray ba= m_msgDesc.toLocal8Bit();
				long saddr=(long)ba.data();
				long slen=ba.length();
                bool bok=PostMessage((HWND)g_hWnd,WM_USER+m_msgID ,saddr,slen);

			}
			else if(tuxCallBack)
			{
                //   emit(Inited(CTuxedoThread *(this)));
				// emit(Inited(int(1)));
				//tuxCallBack(0,0,0);
                
			}
		}
		
		
		//exec();	  
		return r;// 0;  
}
int CTuxedoThread::TuxFmlRunCallA()
{

       m_msgDesc=""; 
	   m_ErrID=0;
	   long rcvlen;
	   int r=0;
       
	   if(!g_bInited)
	   {   m_msgDesc= "Not initialized";
		   return ERROR_TUX_NOT_INITED;
	   }
	   g_tmLastCall=GetTickCount();
	   bool bTriedReInit =false;
	
	   bool bWait=false;

   CallAgain:
	   // ret = fun.tpcall ( m_SrvName,  (char *)m_pSndBufFML, 0, (char **)&m_pRcvBufFML, &m_nRcvBufLen,0);
	   int  ret = fun.tpacall( m_SrvName,  (char *)m_pSndBufFML, m_nSndBufLen,TPNOBLOCK);
	  
       if(ret == -1)
	   {
              QString tpErrDes;
			  m_msgDesc.sprintf("Tperrno = %d.",tperrno);
			  r=tperrno;
			  if(r==6)
			  {
                  m_msgDesc=m_msgDesc + "The service name does not exist";
			  }
			  else if(r==12)
			  {
				  m_msgDesc=m_msgDesc + "Network error or invalid wsdn";
				  g_bNeedReconn=true;
				//  bWait=g_WaitCondi.wait( &g_Mutex,60000);

				  /*
				  if(!bTriedReInit)
				  { 
				     
					  fun.tpterm();
					  g_bInited=false;
					  g_bIniting=true;
					  r=RunInit();
				      bTriedReInit=true;
					  
				      if(!r)
				        goto CallAgain;
						
				  }
				  */
              }
			  else
			  {   tpErrDes=fun.tpstrerror(tperrno);
                  m_msgDesc=m_msgDesc+tpErrDes;
			  }
			  
              m_msgID=MSG_TUX_CALL_FAILED;
			 /* QString ttt=m_SrvName;
			  m_msgDesc="service name:"+ ttt + " "+ m_msgDesc;
			  QByteArray ba= m_msgDesc.toAscii();
			  MessageBoxA( NULL,ba.data() ,"CALL FAILED",MB_OK);*/
       }
	   else
	   {
		 // (char **)&m_pRcvBufFML, &m_nRcvBufLen, 
		   QTime tm;
		   tm.start();
		   bool bOK=false;
		   while(1)
		   { 
             m_nRcvBufLen=0;
		     fun.tpgetrply(&ret,(char **)&m_pRcvBufFML, &m_nRcvBufLen,TPNOBLOCK);
			 if (m_nRcvBufLen)
			 {
				 bOK=true;
				 break;
			 }
			 if (tm.elapsed()>15000)
			 {   fun.tpcancel(ret);
				 break;
			 }
			 msleep(50);

		   }
		   if(bOK)
		   {
           		m_msgDesc=*(char *)m_pRcvBufFML;//m_outputBuf;
				m_msgID=MSG_TUX_CALL_OK;
				r=0;
		   }
		   else
		   {
               r=ERROR_FML_CALL_REPLY_TIMEOUT;
			   m_msgDesc="Timeout while getting fml call reply"; 
		   }
			//MessageBoxA(NULL,"CALLOK","",MB_OK);
			
			

	   }
	   //fun.tpterm();
	  
	 //  g_Mutex.unlock();
       char cTemp[302];
	   m_ErrID=r;
        if (m_bAsync)
		{   if(g_hWnd)
			{
				QByteArray ba= m_msgDesc.toLocal8Bit();
				long saddr=(long)ba.data();
				long slen=ba.length();
                bool bok=PostMessage((HWND)g_hWnd,WM_USER+m_msgID ,saddr,slen);

			}
			else if(tuxCallBack)
			{
                //   emit(Inited(CTuxedoThread *(this)));
				// emit(Inited(int(1)));
				//tuxCallBack(0,0,0);
                
			}
		}
		
		
		//exec();	  
		return r;// 0;  
}
	   	   
int CTuxedoThread::TuxStrRunCall()
{
	  char * rcvbuf,*sendbuf;
	  
	   long rcvlen,ret;
	   strcpy(*m_outputBuf,"ok");
	   return 0;

       int sendlen = strlen(m_inputBuf);

       // 使用tpalloc申请string类型buffer作为请求和应答buffer 

       if((sendbuf = (char *) tpalloc( "STRING", NULL, sendlen+1)) == NULL) {

              (void) fprintf(stderr,"Error allocating send buffer ");

             // tpterm();

              return -1;

       }

       if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {

              (void) fprintf(stderr,"Error allocating receive buffer ");

              tpfree(sendbuf);

             // tpterm();

              return -1;

       }

	  
       strcpy(sendbuf, m_inputBuf);
	   
       ret = tpcall( m_SrvName,  (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0);
      
	   	
       if(ret == -1) 
	   {
             
			  m_msgDesc.sprintf("Tperrno = %d . Can't send request to service",tperrno);
			  

              tpfree((char *)sendbuf);

              tpfree((char *)rcvbuf);

              m_msgID=MSG_TUX_CALL_FAILED;
              

       }
	   else
	   {
		    strcpy(*m_outputBuf,rcvbuf);
            *m_outputLen=strlen(rcvbuf);
			m_msgDesc=*m_outputBuf;
			m_msgID=MSG_TUX_CALL_OK;
			

	   }
       

       tpfree((char *)sendbuf);
       tpfree((char *)rcvbuf);
	   QByteArray ba= m_msgDesc.toLocal8Bit();
	   long saddr=(long)ba.data();
	   long slen=ba.length();
      
       if (m_bAsync)
		{   if(g_hWnd)
			{
                bool bok=PostMessage((HWND)g_hWnd,WM_USER+m_msgID ,saddr,slen);

			}
			else if(tuxCallBack)
			{
                //   emit(Inited(CTuxedoThread *(this)));
				// emit(Inited(int(1)));
				//tuxCallBack(0,0,0);
                
			}
		}
		return 0;// 0;  
}
/*
int CTuxedoThread::RunTuxCall()
{
	   //char * rcvbuf,*sendbuf;
	   FBFR32 *rcvbuf,*sendbuf;
	   long rcvlen,ret;
	   

      // int sendlen = strlen(m_inputBuf);

       // 使用tpalloc申请string类型buffer作为请求和应答buffer 

       if((sendbuf = (char *) tpalloc( "STRING", NULL, sendlen+1)) == NULL) {

              (void) fprintf(stderr,"Error allocating send buffer ");

             // tpterm();

              return -1;

       }

       if((rcvbuf = (char *) tpalloc("STRING", NULL, sendlen+1)) == NULL) {

              (void) fprintf(stderr,"Error allocating receive buffer ");

              tpfree(sendbuf);

             // tpterm();

              return -1;

       }

	   int sendlen=1024;

	   if((sendbuf = (FBFR32*) tpalloc( "FML32", NULL, sendlen+1)) == NULL) {

              (void) fprintf(stderr,"Error allocating send buffer ");

             // tpterm();

              return -1;

       }

       if((rcvbuf = (FBFR32*) tpalloc("FML32", NULL, sendlen+1)) == NULL) {

              (void) fprintf(stderr,"Error allocating receive buffer ");

              tpfree((char *)sendbuf);

             // tpterm();

              return -1;

       }
	   

       //(void) strcpy(sendbuf, m_inputBuf);

       //char cTemp[100];
	   //char cInput[10];
       long ll;
	   ll=10001;
	  
	   ret = Fchg32(sendbuf,33554562,0,(char *)&ll,4);//ORIG_ID

       ret = Fchg32(sendbuf,167772272,0,"0518",0);//AREA CODE
       ret = Fchg32(sendbuf,167772269,0,"82610177",0);//ACC_NBR
	   //ret = Fchg32(sendbuf,33564437,0,"2",0);//GET_FLAG
	   ll=2;
       ret = Fchg32(sendbuf,33564437,0,(char *)&ll,4);//GET_FLAG
	   
       ret = tpcall( m_SrvName,  (char *)sendbuf, 0, (char **)&rcvbuf, &rcvlen, (long)0);
      
	   	
       if(ret == -1) {
             
			  m_msgDesc.sprintf("Tperrno = %d . Can't send request to service",fun.tperrno);
			  

              tpfree((char *)sendbuf);

              tpfree((char *)rcvbuf);

              //tpterm();
              m_msgID=MSG_TUX_CALL_FAILED;
              

       }
	   else
	   {
		    strcpy(*m_outputBuf,rcvbuf);
            *m_outputLen=strlen(rcvbuf);
			m_msgDesc=*m_outputBuf;
			m_msgID=MSG_TUX_CALL_OK;
			

	   }
       char cTemp[302];
	   FLDLEN32 fl=10;
	   ret = Fget32(rcvbuf,33564489,0,cTemp,&fl); //OWE_FLAG
	   long oweFlag=*(long *) cTemp;
       fl=10;
	    ret = Fget32(rcvbuf,33554545,0,cTemp,&fl); //BALANCE
		 long balance=*(long *) cTemp;
        fl=10;
	    ret = Fget32(rcvbuf,33564433,0,cTemp,&fl); //IRESULT
        long lResult=*(long *) cTemp;
		fl=301;
	    ret = Fget32(rcvbuf,167782162,0,cTemp,&fl); //SMSG


       tpfree((char *)sendbuf);
       tpfree((char *)rcvbuf);
	   QByteArray ba= m_msgDesc.toLocal8Bit();
	   long saddr=(long)ba.data();
	   long slen=ba.length();
      
       if (m_bAsync)
		{   if(g_hWnd)
			{
                bool bok=PostMessage((HWND)g_hWnd,WM_USER+m_msgID ,saddr,slen);

			}
			else if(tuxCallBack)
			{
                //   emit(Inited(CTuxedoThread *(this)));
				// emit(Inited(int(1)));
				//tuxCallBack(0,0,0);
                
			}
		}
		return 0;// 0;  
}
*/
void CTuxedoThread::run()
 {
    if (action=="Init")
	{
           //RunInit();
          KeepConnection();
           //tuxCallBack=cbAddress;
	}
	else if(action=="FmlCall")
	{
       TuxFmlRunCall();
    }
 }
 int CTuxedoThread::TuxInit(char * WSNADDR,char *userName,char *pwd,char * cltName,char * grpName,bool bAsync, TUXCALLBACK cbAddress)
 {
     action="Init";
     strcpy(m_WSNADDR,WSNADDR);
	 strcpy(m_userName,userName);
	 strcpy(m_pwd,pwd);
	 strcpy(m_cltName,cltName);
	 strcpy(m_grpName,grpName);  
	 m_bAsync=bAsync;
	// bool rrr= connect( this,SIGNAL(Inited(int)),this,SLOT(myInited(int)),Qt::QueuedConnection);
     // rrr= connect( this,SIGNAL(Inited(int)),&app,SLOT(Inited(int)),Qt::QueuedConnection);
	// emit(Inited(1));
	 return 0;

 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -