/**
  Function : doTestStepL
  Description : Change the IMAP4 Subscribe and Synchronise settings of a test case through the .ini file
  @return : TVerdict - Test step result
*/		
TVerdict CT_MsgChangeImap4SubAndSyncSettings::doTestStepL()
	{
	INFO_PRINTF1(_L("Test Step : ChangeImap4SubAndSyncSettings"));
	if(ReadIni())
		{
		CEmailAccounts* accounts = CEmailAccounts::NewL();
		CleanupStack::PushL(accounts);
			
		CImImap4Settings *imapSettings = new (ELeave) CImImap4Settings;
		CleanupStack::PushL(imapSettings);
				
		TImapAccount imapAccountId;
		CT_MsgUtilsCentralRepository::GetImapAccountL((TDes&)iImapAccountName,imapAccountId);
				
		accounts->LoadImapSettingsL(imapAccountId,*imapSettings);
			
		TFolderSubscribeType setFolderSubscribeType = CT_MsgUtilsEnumConverter::ConvertDesToTFolderSubscribeType(iImapSubscribeMethod);
		imapSettings->SetSubscribe(setFolderSubscribeType);
		TFolderSyncType setFolderSyncType = CT_MsgUtilsEnumConverter::ConvertDesToTFolderSyncType(iImapSynchroniseMethod);
		imapSettings->SetSynchronise(setFolderSyncType);
				
		accounts->SaveImapSettingsL(imapAccountId,*imapSettings);
	
		CleanupStack::PopAndDestroy(2,accounts); // imapSettings,accounts
		}
	return TestStepResult();
	}
예제 #2
0
//读取设置,一般不用调用,在本ARX初化时会调用
bool INISetting::ReadFile()
{
	int i;
	CString sFilePath;
	CStringArray aKey;
	CStringArray aValue;
	PtrStruct *pWillAdd;
	sFilePath=m_sINIFilePath;
	m_aAppNameArray.RemoveAll();
	//	DPrintf("\n ***当前的设置文件是 %s\n",sFilePath);

	//2003.3.6  
	//-------------->>>>何永平 加入求文件长度
	CFileStatus fs;
	if (CFile::GetStatus(sFilePath,fs) == FALSE)
		return false;
	if (m_pBuffer != NULL)
		delete [] m_pBuffer;
	m_pBuffer=new char[int(fs.m_size*1.5)];
	if (m_pBuffer == NULL)
	{
		CString sPrompt;
		sPrompt.Format("ini文件分配内存错!\n[%d]字节",int(fs.m_size*1.2));
		AfxMessageBox(sPrompt);
	}

	//清空全局变量
	//读取所有字段
	if (GetPrivateProfileSectionNames(m_pBuffer,INIBUFFERLENGTH-3,sFilePath) &&
		Get00Strings(m_pBuffer,m_aAppNameArray))
	{
		//清空过去的映射
		ClearMap();      
		//下面读取所有字段
		for (i=0;i<m_aAppNameArray.GetSize();i++)
		{
			aKey.RemoveAll();
			aValue.RemoveAll();
			pWillAdd=new PtrStruct;
			//读入字段,并把KEY 转为大写

			if (ReadIni(m_aAppNameArray[i],pWillAdd->Data,sFilePath))
			{
				CString sKey=m_aAppNameArray[i];
				sKey.MakeUpper();
				pWillAdd->sAppName=sKey;
				//加入到映射 
				m_mapStringToMap.SetAt(sKey,pWillAdd);
				//				DPrintf("\n ***读取 %s       %d个",pWillAdd->sAppName,pWillAdd->Data.GetCount());
			}
			else
			{
				delete pWillAdd;
				//				DPrintf("\n ***读取 %s 的 [%s]失败!\n",sFilePath,m_aAppNameArray[i]);
				;//这个是空句,至于用处嘛 ……
			}
		}
	}
	return !m_mapStringToMap.IsEmpty();
}
예제 #3
0
int main()
{
	bool flag = false;
	int childpid = 0;
	char *inifile = "transconfig.ini";
	CTcpSocket tcpsocket ;
	CTcpSocket sockettmp ;
	
	openlog("yktbank_gateway",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL3);
	
	if( !ReadIni(inifile))
	{
	    printf("读取配置文件[%s]失败\n",inifile);
	    return -1;
	}
	
	writelog(LOG_DEBUG,"drtp_ip[%s],drtp_port[%d],mainfuncno[%d],list_port[%d]",g_para.drtp_ip, g_para.drtp_port, g_para.main_funcno,g_para.bank_lisnport);
	printf("\n drtp_ip[%s],drtp_port[%d],mainfuncno[%d],list_port[%d]\n",g_para.drtp_ip, g_para.drtp_port, g_para.main_funcno,g_para.bank_lisnport);
	if(!KS_YKT_Clt::Initialize(g_para.drtp_ip, g_para.drtp_port, g_para.main_funcno))
	{
		printf("----------初始化通讯平台失败----------\n");
		return 	-1;
	}
		
	signal(SIGCHLD,SIG_IGN);
	signal(SIGINT,SIG_DFL);
	flag = tcpsocket.Create();
	if(!flag)
		exit(1);
	flag = tcpsocket.Listen(g_para.bank_lisnport);
	if(!flag)
		exit(1);
	while(1)
	{
			flag = tcpsocket.Accept(sockettmp);
			
			if(!flag)
				continue;
			if ((childpid = fork()) == 0)		/* 子进程 */
			{   
				tcpsocket.Close();  
				
				doProcess(sockettmp);     /* 处理请求 */  
				
				sockettmp.Close();
				exit(0);  
			}  
			else if(childpid < 0)
			{
                		printf("创建子进程失败\n");
			}
			sockettmp.Close(); 		/* 父进程 */  
	}
	tcpsocket.Close();
	KS_YKT_Clt::Uninitialize();
	closelog();
	return 0;
}
예제 #4
0
파일: hook.cpp 프로젝트: Eun/MoveToDesktop
BOOL WINAPI DllMain(HINSTANCE handle, DWORD dwReason, LPVOID reserved)
{
	if (dwReason == DLL_PROCESS_ATTACH)
	{
		ReadIni();
	}
	else if (dwReason == DLL_PROCESS_DETACH)
	{
		FreeCom();
	}
	return TRUE;
}
/**
  Function : doTestStepL
  Description : Checks the provisioned SNAP information for the POP account settings of a test case.
  @return : TVerdict - Test step result
*/		
TVerdict CT_MsgCheckPopSNAPSetting::doTestStepL()
	{
	INFO_PRINTF1(_L("Test Step : CheckPopSNAPSetting"));
	if(ReadIni())
		{
		CEmailAccounts* accounts = CEmailAccounts::NewL();
		CleanupStack::PushL(accounts);
		
		CImIAPPreferences* popIapPrefs = CImIAPPreferences::NewLC();
					
		TPopAccount popAccountId;
		CT_MsgUtilsCentralRepository::GetPopAccountL((TDes&)iPopAccountName,popAccountId);
				
		accounts->LoadPopIapSettingsL(popAccountId, *popIapPrefs);	
		
		TBool actualSNAPDefintion = popIapPrefs->SNAPDefined();
		
		if (actualSNAPDefintion == iExpectedSNAPDefinition)
			{
			if (actualSNAPDefintion)
				{
				TInt expectedSNAPPreference = 0;
				if(!GetIntFromConfig(ConfigSection(), KSNAPPreference, expectedSNAPPreference))
					{
					ERR_PRINTF1(_L("An expected SNAP ID value is not specified"));
					SetTestStepResult(EFail);
					CleanupStack::PopAndDestroy(2,accounts); // popIapPrefs, accounts
					return TestStepResult();
					}
				TInt actualSNAPPreference = popIapPrefs->SNAPPreference();
				
				if (actualSNAPPreference != expectedSNAPPreference)
					{
					ERR_PRINTF3(_L("Actual SNAP ID [%d] does not equal Expected SNAP ID [%d]"),actualSNAPPreference,expectedSNAPPreference);
					SetTestStepResult(EFail);
					}
				else
					{
					INFO_PRINTF3(_L("Actual SNAP ID [%d] equals Expected SNAP ID [%d]"),actualSNAPPreference,expectedSNAPPreference);
					}
				}
			}
		else
			{
			ERR_PRINTF3(_L("Actual SNAP Defintion [%d] does not equal Expected SNAP Defintion [%d]"),actualSNAPDefintion,iExpectedSNAPDefinition);
			SetTestStepResult(EFail);
			}
	
		CleanupStack::PopAndDestroy(2,accounts); // popIapPrefs, accounts
		}
	return TestStepResult();
	}
예제 #6
0
//把一个应用程序名读入到映射
bool INISetting::ReadIni(LPCTSTR szAppName, CMapIntToKeyAndValue & mapIntToKeyAndValue,LPCTSTR szFileName)
{
	static CStringArray aKey;
	static CStringArray aValue;
	aKey.RemoveAll();
	aValue.RemoveAll();
	mapIntToKeyAndValue.RemoveAll();
	if (ReadIni(szFileName, szAppName, aKey, aValue))
	{
		for (int i = 0; i < aKey.GetSize(); i++)
		{
			KeyAndValue strTmp;
			strTmp.sKey = aKey.GetAt(i);
			strTmp.sValue = aValue.GetAt(i);

			mapIntToKeyAndValue.SetAt(i, strTmp);
		}
	}
	return !mapIntToKeyAndValue.IsEmpty();
}
/**
  Function : doTestStepL
  Description : Removes the provisioned SNAP information from the SMTP account settings of a test case.
  @return : TVerdict - Test step result
*/		
TVerdict CT_MsgRemoveSmtpSNAPSetting::doTestStepL()
	{
	INFO_PRINTF1(_L("Test Step : RemoveSmtpSNAPSetting"));
	if(ReadIni())
		{
		CEmailAccounts* accounts = CEmailAccounts::NewL();
		CleanupStack::PushL(accounts);
		
		CImIAPPreferences* smtpIapPrefs = CImIAPPreferences::NewLC();
					
		TSmtpAccount smtpAccountId;
		CT_MsgUtilsCentralRepository::GetSmtpAccountL((TDes&)iSmtpAccountName, smtpAccountId);
				
		accounts->LoadSmtpIapSettingsL(smtpAccountId, *smtpIapPrefs);	
		
		smtpIapPrefs->RemoveSNAP();
		
		accounts->SaveSmtpIapSettingsL(smtpAccountId, *smtpIapPrefs);
	
		CleanupStack::PopAndDestroy(2,accounts); // smtpIapPrefs, accounts
		}
	return TestStepResult();
	}
예제 #8
0
int main(int argc,char *argv[])
{
    int rtn;
    openlog("buencsvr",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL0);
    g_pSvrLink = BUPubInitialize(g_XBDefines,CallBDFunc,WriteAppInfo,&g_LogFile);
    SetLogShowLevel(0);   
    sprintf(g_szVerNo,"%s %s (%s)",argv[0],YKT_VERSION,__DATE__);
    if(argc==2)
    {
        if(strncmp(argv[1],"-v",2)==0||strncmp(argv[1],"-V",2)==0)
        {
            printf("%s\n",g_szVerNo);
            closelog();
            return 0;
        }
    }
    BKConfiguration::instance()->load_config();
    
    if (argc<2)
        ReadIni("ksbu.ini");
    else
        ReadIni(argv[1]);

    ResetBPFunctions();
    if (argc>2)
    {
        ListBPFunctions(argv[2]);
    }

    

    DEBUG_RUNTIME_MSGOUT("加载系统参数成功!\n");
    // 初始化与BCC连接:
    do 
    {
        rtn = g_pSvrLink->ToLink(&g_BUnit);
        if (rtn==1)
        {
            DEBUG_RUNTIME_MSGOUT("与业务调度中心(BCC)的连接成功!\n");
            break;
        }
        else if (rtn==-100)
        {
            DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
            mysleep(g_BUnit.iHBInterval);
        }
        else
        {
            // 应该属于故障,或对方并不是BCC
            return(rtn);
        }
    } while (1);
#ifdef WIN32
    setnoblockgetch();
#endif

    while (g_pSvrLink->LinkOK())
    {
#ifdef WIN32
        switch (mygetch())
        {
        case '?':
        case 'h':
        case 'H':
            printf("\nCommand List:\n");
            printf("\t ? or h: display this Help informations!\n");
            printf("\t x: To eXit this business unit.\n");
            printf("\t d: Display functions status.\n");
            printf("\t l: List functions status into <function.lst>.\n");
            printf("Enter command to select:");
            break;
        case 'x':
        case 'X':
            g_pSvrLink->bExit = true;
            continue;
            break;
        case 'd':
        case 'D':
            ListBPFunctions(NULL);
            break;
        case 'l':
        case 'L':
            ListBPFunctions("function.lst");
            break;
        }
#endif
        g_pSvrLink->Processing(&g_BUnit);
        if (g_pSvrLink->bExit) break;
    }

    g_pSvrLink->Close();
    DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
    g_LogFile.Close();
    closelog();
    return(0);
}
예제 #9
0
파일: MQproc.c 프로젝트: tm3553881/tesweb
int	InitGlobalVal()
{
    char *p;

	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.QM");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.QM设置不正确");		
		return(-12201);
	}
	else
	{
		strip(p);
		memset(SimQM,0x00,sizeof(SimQM));
		strcpy(SimQM,p);
	}
	
	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.REQUEST.QUEUE");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.REQUEST.QUEUE设置不正确");		
		return(-12202);
	}
	else
	{
		strip(p);
		memset(SimReqQ,0x00,sizeof(SimReqQ));
		strcpy(SimReqQ,p);
	}

	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.RESPONSE.QUEUE");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.RESPONSE.QUEUE设置不正确");		
		return(-12203);
	}
	else
	{
		strip(p);
		memset(SimResQ,0x00,sizeof(SimResQ));
		strcpy(SimResQ,p);
	}


	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.MQ.TIMEOUT");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.MQ.TIMEOUT设置不正确");		
		return(-12204);
	}
	else
	{
		strip(p);
		MQFetchTimeOut=atoi(p);
	}

	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.DEALER.COUNT");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.DEALER.COUNT设置不正确");		
		return(-12205);
	}
	else
	{
		strip(p);
		DealCount=atoi(p);
	}

	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.IDLE.TIMEOUT");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.IDLE.TIMEOUT设置不正确");		
		return(-12206);
	}
	else
	{
		strip(p);
		ShmQryStep=atoi(p);
	}

	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.SHMKEY");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.SHMKEY设置不正确");		
		return(-12207);
	}
	else
	{
		strip(p);
		ShmKey=atoi(p);
	}
         
	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.RUNLEVEL");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.RUNLEVEL设置不正确");		
		return(-12208);
	}
	else
	{
		strip(p);
		RunLevel=atoi(p);
	}


	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.MESSAGE.TYPE");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.MESSAGE.TYPE设置不正确");		
		return(-12209);
	}
	else
	{
		strip(p);
		MsgType=atoi(p);
	}


  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.SYSID");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.SYSID设置不正确");		
		return(-12210);
	}
	else
	{
		strip(p);
		memset(sysid,0x00,sizeof(sysid));
		strcpy(sysid,p);
	}

  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.TASKID");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.TASKID设置不正确");		
		return(-12211);
	}
	else
	{
		strip(p);
		memset(taskid,0x00,sizeof(taskid));
		strcpy(taskid,p);
	}


  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.APPID");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.APPID设置不正确");		
		return(-12212);
	}
	else
	{
		strip(p);
		memset(APP_ID,0x00,sizeof(APP_ID));
		strcpy(APP_ID,p);
	}

  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIM.PKG_APP_ID");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIM.PKG_APP_ID设置不正确");		
		return(-12213);
	}
	else
	{
		strip(p);
		memset(PKG_APP_ID,0x00,sizeof(PKG_APP_ID));
		strcpy(PKG_APP_ID,p);
	}
	
  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","CHANNELNAME");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中CHANNELNAME设置不正确");		
		return(-12214);
	}
	else
	{
		strip(p);
		memset(ChannelName,0x00,sizeof(ChannelName));
		strcpy(ChannelName,p);
	}

	

  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","SIMTYPE");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中SIMTYPE设置不正确");		
		return(-12215);
	}
	else
	{
		strip(p);
		memset(SimType,0x00,sizeof(SimType));
		strcpy(SimType,p);
	}	

	
  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","TESADDR");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中TESADDR设置不正确");		
		return(-12216);
	}
	else
	{
		strip(p);
		memset(TesAddr,0x00,sizeof(TesAddr));
		strcpy(TesAddr,p);
	}	


  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","ADAPTERADDR");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中ADAPTERADDR设置不正确");		
		return(-12217);
	}
	else
	{
		strip(p);
		memset(AdapterAddr,0x00,sizeof(AdapterAddr));
		strcpy(AdapterAddr,p);
	}	





	/*****安全配置信息*******/
	
  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","DYNAMIC_IN");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中DYNAMIC_IN设置不正确");		
		return(-12218);
	}
	else
	{
		strip(p);
		memset(DynamicIn,0x00,sizeof(DynamicIn));
		strcpy(DynamicIn,p);
	}	
	
		
  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","DYNAMIC_NAME");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中DYNAMIC_NAME设置不正确");		
		return(-12219);
	}
	else
	{
		strip(p);
		memset(DynamicName,0x00,sizeof(DynamicName));
		strcpy(DynamicName,p);
	}	
	
  	p=NULL;
	p=ReadIni(EtcFile,"OPTION","DYNAMIC_OUT");
	if(p==NULL)
	{
		TesLog(sLogFile,LOG_ERROR,3,"配置文件中DYNAMIC_OUT设置不正确");		
		return(-12220);
	}
	else
	{
		strip(p);
		memset(DynamicOut,0x00,sizeof(DynamicOut));
		strcpy(DynamicOut,p);
	}	



	return(0);
}
예제 #10
0
int main(int argc, char *argv[])
{
	int boothID =0,nTag=0;
	int ret;
	int TagMode=1;	
	int HostType = 1;
	char result[4096];	//Max Receive data
	char EPC[300];
	char oldEPC[300];
	char buf[256];
	char URL[256];
	char PAValue[6];
	char Rssi[6];
	LinuxWatchDog watchDog(60);
	
	if(argc == 1)
	{
		printf("Usage:\n");
		printf("ART3x0 command boothID\n");
		return 0;
	}
	
	// Read setting from ini file
	memset(oldEPC,'\0', sizeof(oldEPC));	
	ReadIni(buf,"wpc.cfg","Mode","GetTag");
	TagMode = atoi(buf);
	printf("Mode:%d\n",TagMode);
	
	memset(URL,'\0', sizeof(URL));	
	ReadIni(URL,"wpc.cfg","WebService","URL");
	printf("URL:%s\n",URL);

	memset(PAValue,'\0', sizeof(PAValue));
	ReadIni(PAValue,"wpc.cfg","RFIDPOWER","PAValue");
	printf("PAValue:%s\n",PAValue);
	
	memset(Rssi,'\0', sizeof(Rssi));
	ReadIni(Rssi,"wpc.cfg","RFIDPOWER","ValidRSSI");
	printf("Rssi:%s\n",Rssi);
	
	memset(buf,'\0', sizeof(buf));
	ReadIni(buf,"wpc.cfg","Mode","HostType");
	printf("HostType:%s\n",buf);
	HostType = atoi(buf);
	
	RU25Lib art3x0;
	printf("Reader connect...\n");
	
	if(art3x0.Open(COM1) != 0)
	{	// UTC-DS31 is use COM1, COM2 is debug port
		//printf("Open COM1 fail! \n");
		return 1;
	}
	
	if(TagMode == 1)
	{	// set PA Gain
		printf("Set internal PA.\n");
		art3x0.SetParameter("internalpagain",PAValue);
		printf("Set run milisecond.\n");
		art3x0.SetParameter("runmilisecond","400");
	}
	else if(TagMode == 2)
	{	// set PA Gain	
		printf("Set internal PA\n");
		art3x0.SetParameter("internalpagain",PAValue);
		printf("Set antennaswitchmode PA.\n");
		art3x0.SetParameter("antennaswitchmode","0");	// 使用2支天線 Attena1,2輪流
	}
	// set frequency 915.xx Enable
	printf("Set setchanneldisable PA.\n");
	art3x0.SetParameter("setchannel Disable","927.75");
	//art3x0.SetParameter("setchanneldisable","924.75");
	art3x0.SetParameter("setchanneldisable","927.25");
	//art3x0.SetParameter("setchanneldisable","924.25");
	art3x0.SetParameter("setchanneldisable","926.75");
	art3x0.SetParameter("setchanneldisable","923.75");
	art3x0.SetParameter("setchanneldisable","926.25");
	art3x0.SetParameter("setchanneldisable","923.25");
	//art3x0.SetParameter("setchanneldisable","925.75");
	art3x0.SetParameter("setchanneldisable","922.75");
	//art3x0.SetParameter("setchanneldisable","925.25");
	art3x0.SetParameter("setchanneldisable","922.25");
	
	printf("Set setchannel Enable PA\n");
	art3x0.SetParameter("setchannelenable","915.25");
	art3x0.SetParameter("setchannelenable","915.75");
	//art3x0.SetParameter("setchannelenable","916.25");
	art3x0.SetParameter("setchannelenable","914.75");
	printf("Set run milisecond\n");
	art3x0.SetParameter("runmilisecond","400");
	
	watchDog.Start();
	while(1)
	{
		memset(result,'\0', sizeof(result));
		memset(EPC,'\0', sizeof(EPC));
		//printf("Inventory:\n");
		//WriteLog("- art3x0.Inventory Start -");
		ret = art3x0.Inventory(result, &nTag);
		//WriteLog("- art3x0.Inventory End -");
		//printf("	Ret: %d \r\n",ret);
		if(nTag > 0)
		{
			printf("Result:\n%s\n\n",result);
		}
		
		if(strlen(result) > 6)
		{
			//ScreenNearTag((char*)(&EPC),result);
			if(TagMode == 1)
			{
				if(art3x0.GetNearestEPC((char*)(&EPC),atoi(Rssi)) == true)
				{					
					//if(strcmp(EPC,oldEPC) != 0) // Filter same Tag
					//{
						printf("EPC:%s, ID:%s \n",EPC,argv[1]);
						if(HostType == 1)
						{
							ret = SendTagToWPCServer(EPC,argv[1],URL);
							//test ret = SendTagToWPCServer("3400E2003412013C100009380D9E",argv[1],URL);
							if(ret == 1)
							{
								printf("Return True.\n");
							}
							else
							{
								printf("Return False.\n");
							}
						}
						//else if(HostType == 2)
						//{
						//
						//	system("/www/SendStrings 'this is first line' 'this is second line' ");
						//}
					//}
				}
				//else
				//{
				//	memset(oldEPC,'\0', sizeof(oldEPC));
				//}
			}
			else if(TagMode == 2)
			{
				ret = SendTagListToWPCServer(result,argv[1],URL);
				if(ret == 1)
				{
					printf("Return True.\n");
				}
				else
				{
					printf("Return False.\n");
				}
			}
		}
		watchDog.KeepAlive();
		if(TagMode == 1)
		{
			usleep(200000);	//200ms
		}
		else
		{
			usleep(100000);	//100ms
		}
	}
	watchDog.Stop();
	return 0;
};
예제 #11
0
int main(int argc,char *argv[])
{
   int rtn;
   pSqlDB = &(g_BUnit.m_SqlDB); // 供外部方便检查,主要用于DEBUGSQLERROR(msg)
   g_BUnit.pSvrLink = &g_SvrLink;
   g_LogFile.SetFlushDelay(0);
   g_LogFile.Open("bulog");
   openlog("yktbase",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL0);
   memset(pSqlDB,0,sizeof(ST_SQLDB));
   //puts("Before Reading ini...");
   if (argc<2)
      ReadIni("fdsvrall.ini");
   else
      ReadIni(argv[1]);
   DEBUG_RUNTIME_MSGOUT("读配置文件end");
   ResetBPFunctions();
   if (argc>2)
   {
      ListBPFunctions(argv[2]);
   }

   pSqlDB->bConnected = 0;   

   // 初始化数据库连接:
   SQLInitialize();
   if (SQLConnectToServer()!=0)
   {
      	DEBUG_RUNTIME_MSGOUT("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
   	g_LogFile.Close();
	closelog();
      return(-100);
   }
#ifndef WIN32
	struct sigaction sigact;
	memset(&sigact,0,sizeof sigact);
	sigact.sa_handler = sig_alarm_handler;
	
	sigaction(SIGALRM,&sigact,NULL);
#endif
   // 初始化与BCC连接:
   DEBUG_RUNTIME_MSGOUT("连接数据库成功!\n");
   do 
   {
      rtn = g_SvrLink.ToLink(&g_BUnit);
      if (rtn==1)
      {
         puts("与业务调度中心(BCC)的连接成功!\n");
         break;
      }
      else if (rtn==-100)
      {
         DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
	 puts("sleep waiting for connect  BCC!");
         mysleep(g_BUnit.iHBInterval);
      }
      else
      {
    			g_LogFile.Close();
			closelog();
         	 	return(rtn);
      }
   } while (1);
   setnoblockgetch();

   while (g_SvrLink.LinkOK())
   {
   /*
      switch (mygetch())
      {
      case '?':
      case 'h':
      case 'H':
         printf("\nCommand List:\n");
         printf("\t ? or h: display this Help informations!\n");
         printf("\t x: To eXit this business unit.\n");
         printf("\t d: Display functions status.\n");
         printf("\t l: List functions status into <function.lst>.\n");
         printf("Enter command to select:\n");
         break;
      case 'x':
      case 'X':
         g_SvrLink.bExit = true;
         continue;
         break;
      case 'd':
      case 'D':
         ListBPFunctions(NULL);
         break;
      case 'l':
      case 'L':
         ListBPFunctions("function.lst");
         break;
      }
      */
      TestSQLConnect();
      if (pSqlDB->bConnected==0)
      {
         mysleep(1000);
         if (!g_SvrLink.CheckLink()) 
            break;  // BCC exit (可能用户发现数据库连接断开,需要维护系统,导致手工将BCC退出同时也需要BU退出)
         if (SQLConnectToServer()!=0)
         {
            // SQL Link error:
            DEBUG_RUNTIME_MSGOUT("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
         }
         else
         {
            DEBUG_RUNTIME_MSGOUT("与数据库连接成功!\n");
         }
         continue;
      }
      else 
         g_SvrLink.Processing(&g_BUnit);
      if (g_SvrLink.bExit) break;
   }


/* ****** Updated by CHENYH at 2004-4-14 11:07:19 ****** 
   经过测试后,CheckLink()工作正常,测试环境为:BCC(WIN)+BU(WIN),BCC(LINUX)+BU(WIN),BCC(LINUX)+BU(LINUX)
   while (1)
   {
      mysleep(1000);
      if (!g_SvrLink.CheckLink())
      {
         printf("TEST CHECK LINK return <false>!\n");
         break;
      }
   }
*/
   g_SvrLink.Close();
   closelog();
   SQLExit();
   DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
   g_LogFile.Close();
   return(0);
}
예제 #12
0
파일: ksbu.cpp 프로젝트: nykma/ykt4sungard
int main(int argc,char *argv[])
{
   int rtn;
   openlog("yktbank",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL3);
   g_pSvrLink = BUPubInitialize(g_XBDefines,CallBDFunc,WriteAppInfo,&g_LogFile);
   SetLogShowLevel(0);   
   if (argc<2)
      ReadIni("ksbu.ini");
   else
      ReadIni(argv[1]);

   ResetBPFunctions();
   if (argc>2)
   {
      ListBPFunctions(argv[2]);
   }

   // 初始化与BCC连接:
   do 
   {
      rtn = g_pSvrLink->ToLink(&g_BUnit);
      if (rtn==1)
      {
         //DEBUG_RUNTIME_MSGOUT("与业务调度中心(BCC)的连接成功!\n");
         break;
      }
      else if (rtn==-100)
      {
         //DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
         //mysleep(g_BUnit.iHBInterval);
	sleep(10);
      }
      else
      {
         // 应该属于故障,或对方并不是BCC
         return(rtn);
      }
   } while (1);
#ifdef WIN32
   setnoblockgetch();
#endif

	key_t key;
	struct shmid_ds buf;


// Update by lq at 2005-03-10
// 将创建共享内存和设备签到移到bankguard中去
// 必须先运行bankguard此处操作才能完成

	key=ftok("bankguard",9);
	shmid=shmget(key,SEGSIZE,0666);
	if(-1==shmid)
	{
		printf("errno=%s\n",strerror(errno));
		return 	100021;	
	}
	shm=(char*)shmat(shmid,0,0);
	if((int)shm==-1)
	{
		return 	100515;	
	}
	semid=semget(key,1,0);
	if(semid==-1)
	{
		return 100515;
	}
	
   while (g_pSvrLink->LinkOK())
   {
#ifdef WIN32
      switch (mygetch())
      {
      case '?':
      case 'h':
      case 'H':
         printf("\nCommand List:\n");
         printf("\t ? or h: display this Help informations!\n");
         printf("\t x: To eXit this business unit.\n");
         printf("\t d: Display functions status.\n");
         printf("\t l: List functions status into <function.lst>.\n");
         printf("Enter command to select:");
         break;
      case 'x':
      case 'X':
         g_pSvrLink->bExit = true;
         continue;
         break;
      case 'd':
      case 'D':
         ListBPFunctions(NULL);
         break;
      case 'l':
      case 'L':
         ListBPFunctions("function.lst");
         break;
      }
#endif
      g_pSvrLink->Processing(&g_BUnit);
      if (g_pSvrLink->bExit) break;
   }
   g_pSvrLink->Close();
   //SQLExit();
   //DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
   g_LogFile.Close();
   closelog();
   return(0);
}
예제 #13
0
int main(int argc,char *argv[])
{
   int rtn;
   pSqlDB = &(g_BUnit.m_SqlDB); // 供外部方便检查,主要用于DEBUGSQLERROR(msg)
   g_BUnit.pSvrLink = &g_SvrLink;
   g_LogFile.SetFlushDelay(0);
   g_LogFile.Open("bulog");
   memset(pSqlDB,0,sizeof(ST_SQLDB));
   openlog("fdykt_hhd",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL4);
   puts("Before Reading ini...");
   if (argc<2)
      ReadIni("fdsvrall.ini");
   else
      ReadIni(argv[1]);
   puts("读配置文件end!\n");
   DEBUG_RUNTIME_MSGOUT("读配置文件end");
   ResetBPFunctions();
   if (argc>2)
   {
      ListBPFunctions(argv[2]);
   }

   pSqlDB->bConnected = 0;   

   // 初始化数据库连接:
   SQLInitialize();
   if (SQLConnectToServer()!=0)
   {
      DEBUG_RUNTIME_MSGOUT("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
      return(-100);
   }
   // 初始化与BCC连接:
   DEBUG_RUNTIME_MSGOUT("连接数据库成功!\n");
   do 
   {
      rtn = g_SvrLink.ToLink(&g_BUnit);
      if (rtn==1)
      {
         DEBUG_RUNTIME_MSGOUT("与业务调度中心(BCC)的连接成功!\n");
         break;
      }
      else if (rtn==-100)
      {
         DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
	 puts("sleep waiting for connect  BCC!");
         mysleep(g_BUnit.iHBInterval);
      }
      else
      {
         // 应该属于故障,或对方并不是BCC
         DEBUG_RUNTIME_MSGOUT("未知错误\n");
         return(rtn);
      }
   } while (1);
   setnoblockgetch();

/**********************************************************************
 Added by hhd at 2004-09-16
 为了增加签到处理,达到共享内存的处理
 增加共享内存和信号量
 共享内存一共1024个字节,其中使用前18个字节
 shm[0]:代表是否进行过签到的标志,如果为1,已经签过到但不知道是否成功
 		,后续业务将不能进行签到处理,如果为其他值,系统将进行签到
 shm[1]:代表签到是否成功的标志,如果为1,则标识签到成功,后续16个字节为
 		银行正常返回数据,可以使用
 shm[2~17]:前8个字节为加密的PIN密钥,后8个字节为加密的MAC密钥
***********************************************************************/
/**********************************************************************
 Update by hhd at 2004-10-27
 为了增加签到处理,达到共享内存的处理
 增加共享内存和信号量
 为了反映每个终端的当前工作状态,在共享内存中设置一个状态标志
 共享内存一共1024个字节,其中使用前26个字节
 shm[0]:代表是否进行过签到的标志,如果为1,已经签过到但不知道是否成功
 		,后续业务将不能进行签到处理,如果为其他值,系统将进行签到
 shm[1]:代表签到是否成功的标志,如果为1,则标识签到成功,后续16个字节为
 		银行正常返回数据,可以使用
 shm[2]:代表系统重新启动标志,如果不为1,系统进行初始化操作(进行设备
 		注册表中设备的状态的清空操作),然后系统将改标志置为1,其他BU启动
 		跳过该项操作
 shm[10~25]:前8个字节为加密的PIN密钥,后8个字节为加密的MAC密钥
***********************************************************************/

	key_t key;
	int ret=0;
	struct shmid_ds buf;


// Update by lq at 2005-03-10
// 将创建共享内存和设备签到移到bankguard中去
// 必须先运行bankguard此处操作才能完成

	key=ftok(".",0);
	shmid=shmget(key,SEGSIZE,0666);
	if(-1==shmid)
	{
		DEBUG_RUNTIME_MSGOUT("获取共享内存失败,请确保bankguard已经启动\n");
		return 	E_CREATE_SHARE_MEMORY;	
	}
	shm=(char*)shmat(shmid,0,0);
	if((int)shm==-1)
	{
		DEBUG_RUNTIME_MSGOUT("映射共享内存失败");
		return 	E_JOIN_SHARE_MEMORY;	
	}
	semid=semget(key,1,0);
	if(semid==-1)
	{
		DEBUG_RUNTIME_MSGOUT("获取共享锁id失败");
		return E_JOIN_SHARE_MEMORY;
	}

   while (g_SvrLink.LinkOK())
   {
      switch (mygetch())
      {
      case '?':
      case 'h':
      case 'H':
         printf("\nCommand List:\n");
         printf("\t ? or h: display this Help informations!\n");
         printf("\t x: To eXit this business unit.\n");
         printf("\t d: Display functions status.\n");
         printf("\t l: List functions status into <function.lst>.\n");
         printf("Enter command to select:\n");
         break;
      case 'x':
      case 'X':
         g_SvrLink.bExit = true;
         continue;
         break;
      case 'd':
      case 'D':
         ListBPFunctions(NULL);
         break;
      case 'l':
      case 'L':
         ListBPFunctions("function.lst");
         break;
      }
      
      TestSQLConnect();
      if (pSqlDB->bConnected==0)	//这个变量有人维护吗?
      {
         mysleep(1000);
         if (!g_SvrLink.CheckLink()) 
            break;  // BCC exit (可能用户发现数据库连接断开,需要维护系统,导致手工将BCC退出同时也需要BU退出)
         if (SQLConnectToServer()!=0)
         {
            // SQL Link error:
            DEBUG_RUNTIME_MSGOUT("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
         }
         else
         {
            DEBUG_RUNTIME_MSGOUT("与数据库连接成功!\n");
         }
         continue;
      }
      else 
         g_SvrLink.Processing(&g_BUnit);
      if (g_SvrLink.bExit) break;
   }


/* ****** Updated by CHENYH at 2004-4-14 11:07:19 ****** 
   经过测试后,CheckLink()工作正常,测试环境为:BCC(WIN)+BU(WIN),BCC(LINUX)+BU(WIN),BCC(LINUX)+BU(LINUX)
   while (1)
   {
      mysleep(1000);
      if (!g_SvrLink.CheckLink())
      {
         printf("TEST CHECK LINK return <false>!\n");
         break;
      }
   }
*/

	shmdt(shm);
	shmctl(shmid,IPC_RMID,&buf);
	d_sem(semid);

	closelog();
	g_SvrLink.Close();
	SQLExit();
	DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
	g_LogFile.Close();
	return(0);
}
/**
  Function : doTestStepL
  Description : Sets the priority of an email message via the IMAP \Flagged flag
  @return : TVerdict - Test step result
*/
TVerdict CT_MsgSetImap4EmailPriority::doTestStepL()
	{
	INFO_PRINTF1( _L("Test Step : SetSmtpEmailPriority") );
	if (ReadIni())
		{
		TMsvId parentFolderId;
		// Local parent folder location...
		if(iLocation.Compare(_L("LOCAL"))==0)
			{
			// Retrieves the folder Id based on the local folder name read from the ini file
			parentFolderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(iParentFolderName);
			if(parentFolderId == KErrNotFound)
				{
				ERR_PRINTF1(_L("Invalid local parent folder name specified"));
				SetTestStepResult(EFail);
				return TestStepResult();
				}
			INFO_PRINTF2(_L("The local parent folder Id is %d"),parentFolderId);
			}
		// Remote parent folder location...
		else if(iLocation.Compare(_L("REMOTE"))==0)
			{
			TRAPD(err,parentFolderId = CT_MsgUtils::GetRemoteFolderIdByNameL(iSharedDataIMAP.iSession, iImapAccountName, iParentFolderName));
			if(err == KErrNotFound)
				{
				ERR_PRINTF1(_L("Invalid remote parent folder name specified"));
				SetTestStepResult(EFail);
				return TestStepResult();
				}	
			INFO_PRINTF2(_L(" The remote parent folder Id is %d"),parentFolderId);
			}
		// Location Local or Remote not specified...
		else
			{
			ERR_PRINTF1(_L("Invalid parent folder location"));
			SetTestStepResult(EFail);
			return TestStepResult();
			}
			
		// Retrieves the message Id based on the message subject of the email under the given parent folder
		TMsvId	messageId;
		TRAPD(err,messageId = CT_MsgUtils::SearchMessageBySubjectL(iSharedDataIMAP.iSession, parentFolderId, iEmailSubject));
		if(err == KErrNotFound)
			{
			ERR_PRINTF1(_L("The given message is not found"));
			SetTestStepResult(EFail);
			}
		// Message found	
		else
			{
			INFO_PRINTF2(_L("The Message Id is %d"),messageId);

			// Retrieve the default Smtp service Id
			TMsvId smtpServiceId(0);
			TRAPD(err, smtpServiceId = CT_MsgUtilsCentralRepository::GetDefaultSmtpServiceIdL());
			if(err != KErrNone)
				{
				ERR_PRINTF2(_L("Failure while getting the default SMTP Service Id. Error = %d"),err);
				SetTestStepResult(EFail);
				}
			else
				{
				INFO_PRINTF2(_L("The Default Smtp Service Id is %d"),smtpServiceId);
				
				CT_MsgActive& active = Active();
				delete iOperation;
				iOperation=NULL;
				
				// Setting the current context to the parent of the mesage
				CMsvEntry*	entry = CMsvEntry::NewL(*iSharedDataIMAP.iSession, messageId, TMsvSelectionOrdering());
				CleanupStack::PushL(entry);
				
				TMsvEmailEntry emailEntry(entry->Entry());
				
				if(iEmailPriority==1)
					{
					emailEntry.SetFlaggedIMAP4Flag(ETrue);
					iOperation = entry->ChangeL(emailEntry,active.iStatus);
					active.Activate();
					CActiveScheduler::Start();
					User::LeaveIfError(active.Result());
					INFO_PRINTF1(_L("The state of the Flagged IMAP4 flag of the email is set for urgent/special attention"));
					}
				else if (iEmailPriority==0)
					{
					emailEntry.SetFlaggedIMAP4Flag(EFalse);
					iOperation = entry->ChangeL(emailEntry,active.iStatus);
					active.Activate();
					CActiveScheduler::Start();
					User::LeaveIfError(active.Result());
					INFO_PRINTF1(_L("The state of the Flagged IMAP4 flag of the email is NOT set for urgent/special attention"));
					}
				else
					{
					ERR_PRINTF1(_L("Error in setting the Flagged IMAP4 flag! Usage: 1=ETrue and 0=EFalse"));
					SetTestStepResult(EFail);
					}
					
				CleanupStack::PopAndDestroy(entry);
				}
			}
		}
	return TestStepResult();
	}
예제 #15
0
int main(int argc,char *argv[])
{
	int	_pid = 0;
	int 	ret=0;
	key_t 	key;
	int intping = 60;	// ping银行间隔
	int intflush = 60;	// 冲正间隔
	int inttrans = 60;	//划拨间隔
	int intcomp = 10;	//对帐时间间隔
	struct 	shmid_ds buf;

	BANK_TRANS_REQUEST	bank_trans;

   	int opt;
   	extern int optind;
   	extern char *optarg;

	while ((opt = getopt(argc, argv, "bdvhi:p:f:")) != EOF)
	{
		switch(opt)
		{
		case 'v':
			printf("bank guard version 1.0.2.10\n");
			return 0;
		case 'b':
			app_flag |= APP_FLAG_DAEMON;
			break;
		case 'd':
			app_flag |= APP_FLAG_DEBUG;
			debug = 2;
			break;
		case 'i':
			app_flag |= APP_FLAG_CONFIG;
			ReadIni(optarg);
			break;
		case 'p':
			intping = atol(optarg);
			break;
		case 'f':
			intflush = atol(optarg);
			break;
		case '?':
		case 'h':
		default:
			printf("usage: %s -options \n", argv[0]);
			printf("\toptions:\n");
			printf("\t-b\t\trun as daemon\n");
			printf("\t-d\t\trun in debug mode, communication content will be printed to stdout\n");
			printf("\t-h\t\tshow this help message\n");
			printf("\t-i inifile\tassign config file\n");
			printf("\t-p ping_interval\tassign the interval between each ping\n");
			printf("\t-f flush_interval\tassign the interval between each database process\n");
			return 0;
		}
	}

 	// 屏蔽信号
	signal(SIGPIPE, sig_handler);
	signal(SIGALRM, sig_handler);
	signal(SIGINT, sig_handler);
	signal(SIGHUP, sig_handler);
	signal(SIGTERM, sig_handler);
	signal(SIGCHLD, sig_handler);

 	if((app_flag&APP_FLAG_CONFIG) == 0)
		ReadIni("trans.ini");

	if((app_flag&APP_FLAG_DAEMON)!= 0)
 	{
 		_pid=fork();
		if(_pid != 0)
			exit(0);
		else if(_pid< 0)
			exit(1);

		setsid();
		_pid=fork();
		if(_pid != 0)
			exit(0);
		else if(_pid< 0)
			exit(1);

		int i;
		for(i=3;i<20;++i)
			close(i);

		//umask(0);
 	}

    	openlog("bank",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL4);

	// 初始化数据库连接:
	SQLInitialize();
	ret = SQLConnectToServer();
	if (ret!=0)
	{
		writelog(LOG_ERR,"连接数据库失败[%d]", ret);
		//printf("连接数据库失败database %s, username %s, password %s, [%d]", g_BUnit.m_SqlDB.szDatabase,g_BUnit.m_SqlDB.szLogin,g_BUnit.m_SqlDB.szPassword, ret);
		printf("连接数据库失败\n");
		return 	E_DB_DBCONN;
	}

   	//创建共享内存
	key=ftok(".",0);
	shmid=shmget(key,SEGSIZE,IPC_CREAT|0666);
	if(-1==shmid)
	{
		writelog(LOG_ERR,"创建共享内存失败[%d]",shmid);
		printf("创建共享内存失败\n");
		return 	E_CREATE_SHARE_MEMORY;
	}
	shm=(char*)shmat(shmid,0,0);
	if((int)shm==-1)
	{
		writelog(LOG_ERR,"连接共享内存失败[%d]",shm);
		printf("连接共享内存失败\n");
		return 	E_JOIN_SHARE_MEMORY;
	}


	//枷锁进行清除设备签到表和前置机签到
	semid=sem(key);
	if((int)semid==-1)
	{
		writelog(LOG_ERR,"创建信号量失败[%d]",semid);
		printf("创建信号量失败\n");
		return 	E_JOIN_SHARE_MEMORY;
	}

	p(semid);

	//初始化共享内存
	memset(shm, 0, SEGSIZE);
	shm[0]=0;
	shm[1]=0;
	writelog(LOG_INFO,"已重置共享内存");
	ret=DB_t_pif_device_update_by_subsystem_type(SUBSYSTYPE_KEEP,SUBSYSSTAT_OFFLINE);
	//if(ret)
	if((ret!=0)&&(ret!=100))
	{
		writelog(LOG_ERR,"DB_t_pif_device_update_by_subsystem_type error,errcode=[%d]",ret);
		shmdt(shm);
		shmctl(shmid,IPC_RMID,&buf);
		d_sem(semid);
		return 	ret;
	}

	shm[2]=1;
	writelog(LOG_ERR,"已清理设备表");

	//枷锁退出
	v(semid);

	//writelog(LOG_INFO,"银行接口初始化完成,bank_bu可以启动了");
	//printf("银行接口初始化完成\n");

	time_t	now = 0;
	time_t 	lastping = 0;		// 上次ping银行时间
	time_t	lastflush = 0;		// 上次处理冲正时间
	time_t	lasttrans=0;		//上次试图帐务划拨的时间
	time_t	lastcomp=0;		//上次试图银行对帐的时间
	T_t_tif_tradeserial  tradeserial; //卡操作流水表,用做冲正用

	// 进入运行
	while(true)
	{
		if((app_flag&APP_FLAG_TERM) != 0)
		{
			writelog(LOG_INFO,"收到终止信号,退出");
			break;
		}

		// 监测与银行通信情况

		now = time(0);
		if((now - lastping) > intping)
		{

			lastping = now;
			if(shm[1] != 1)
			{
				//进行系统登陆,修改登陆标志
				p(semid);

				writelog(LOG_INFO,"开始登陆银行");
				printf("正在登陆银行...\n");

				shm[0]=1;

				ret=Do_Login(&bank_trans);
				if(ret!=0)
				{
					writelog(LOG_ERR,"登陆银行失败[%d]",ret);
					printf("----------登陆银行失败----------\n");
				}
				else
				{
					writelog(LOG_INFO,"登陆银行成功");
					printf("----------登陆银行成功----------\n");
					shm[1]=1;
					shm[3]=0;
					memcpy(shm+10,bank_trans.BankCardPwd,sizeof(bank_trans.BankCardPwd));

					ret=call_240006();
					if((ret!=0)&&(ret!=100))
					{
						writelog(LOG_ERR,"Call 240006 error,errcode=[%d]",ret);
						shmdt(shm);
						shmctl(shmid,IPC_RMID,&buf);
						d_sem(semid);
						return 	ret;
					}

					shm[2]=1;
					writelog(LOG_INFO,"已清理设备表");

					char buffer[100]="";
					int k=0;
					for(int i=0;i<16;i++)
					{
						k=bank_trans.BankCardPwd[i];
						sprintf(&buffer[2*i],"%02X",k);
					}
					writelog(LOG_INFO,"BankCardPwd=[%s]",buffer);
				}
				v(semid);
				continue;
			}

			ret=Do_CheckLine(&bank_trans);
			if(ret != 0)	// ret?
			{
				writelog(LOG_ERR,"与银行的通信可能中断[%d]",ret);
				p(semid);
				shm[1]=0;	// 置登陆标志,// 是否有必要重新登陆??
				shm[3]=1;	// 置通信标志
				v(semid);
			}
			else if(shm[3] == 1)
			{
				writelog(LOG_ERR,"与银行的通信恢复[%d]",ret);
				p(semid);
				shm[3]=0;	// 置通信标志
				v(semid);
			}

		}

		//补发冲正
		now = time(0);
		if((now - lastflush) > intflush)
		{
			lastflush = now;
			//获取下一个冲正记录:状态为需冲正且上次冲正时间最早
			//RESERVE_1不为空的视为冲正成功
			ret = call_240004(&tradeserial);
			if( ret == 0)
			{
				ret = Do_DeTrans(&tradeserial,&bank_trans); 
				if(ret == 0)
				{
					// 更新该冲正记录状态(发送时间、次数)
					// 保留银行端流水号BankSn
					if(0!=strncmp(bank_trans.RetCode,RET_BANK_OK,2))
					{
						writelog(LOG_ERR,"冲正失败,retcode=[%2.2s]",bank_trans.RetCode);
						ret=call_240005();
					}
					else
					{
						writelog(LOG_INFO,"补发冲正记录成功[%ld]", tradeserial.serial_no);
						memcpy(tradeserial.reserve_1, bank_trans.BankSn, sizeof(bank_trans.BankSn));
						ret=call_240005();
					}
				}
				else
				{
					writelog(LOG_INFO,"补发冲正记录失败[%ld]", tradeserial.serial_no);
					ret=call_240005();
				}
			}
		}

		//做银行对帐
		char buffer[20]="";
		int ho_OpCount=0;
		double ho_Fee_Change=0;
		int ret=0;
		now = time(0);
		if((now - lastcomp) > intcomp)
		{
			lastcomp=now;
			//判断系统时间是否到达早6点
			if(0==memcmp("06",getsystime(NULL),2))
			{
				ret=call_240007();
				if(ret)
				{
					writelog(LOG_ERR,"Do_Compare_file error[%d]", ret);
				}
				writelog(LOG_ERR,"Do_Compare_file complete");
			}
		}
		// 休眠
		sleep(5);//13938470950

	}

	p(semid);
	shm[3]=0;	// 置通信标志
	v(semid);

	shmdt(shm);
	shmctl(shmid,IPC_RMID,&buf);
	d_sem(semid);

	SQLExit();
	writelog(LOG_INFO, "程序正常退出");
	printf("程序正常退出\n");
	return(0);
}
예제 #16
0
파일: tlord.cpp 프로젝트: iceberry/flyffsf
////////////////////////////////////////////////////////////////////////////////
// 트랜스 서버용 선거 클래스
CTElection::CTElection( CLord* pLord )
:
IElection( pLord ),
#ifdef __INTERNALSERVER
m_bRun( FALSE )	// 내부 서버는 군주 프로세스 비활성
#else	// __INTERNALSERVER
m_bRun( TRUE )
#endif	// __INTERNALSERVER
{
}

CTElection::~CTElection()
{
}

BOOL CTElection::Initialize( const char* szFile )
{	// 초기화
	if( !ReadIni( szFile ) )	// 스크립트 로드
	{
		election::OutputDebugString( "CTElection::Initialize(): LoadScript(): file not found: %s", szFile );
		return FALSE;
	}
	return TRUE;
}

BOOL CTElection::ReadIni( const char* szFile )
{	// 스크립트 로드
	CScript s;
	if( s.Load( szFile ) == FALSE )
		return FALSE;

	s.GetToken();
	while( s.tok != FINISHED )
	{
		if( s.Token == _T( "property" ) )
		{
			s.GetToken();	// {
			s.GetToken();
			while( *s.token != '}' )
			{
				if( s.Token == _T( "nDayOfWeek" ) )
					property.nDayOfWeek		= s.GetNumber();
				else if( s.Token == _T( "nHour" ) )
					property.nHour	= s.GetNumber();
				else if( s.Token == _T( "tCandidacy" ) )
					property.tCandidacy	= s.GetNumber();
				else if( s.Token == _T( "tVote" ) )
					property.tVote	= s.GetNumber();
				else if( s.Token == _T( "nDays" ) )
					property.nDays	= s.GetNumber();
				s.GetToken();
			}
		}
		else if( s.Token == _T( "rate" ) )
		{
			s.GetToken();	// {
			float fRate	= s.GetFloat();
			while( *s.token != '}' )
			{
				property.m_vReturnDepositRates.push_back( fRate );
				fRate	= s.GetFloat();
			}
		}
		else if( s.Token == _T( "fRequirementFactor" ) )
		{
			property.fRequirementFactor	= s.GetFloat();
		}
		else if( s.Token == _T( "item" ) )
		{
			int iIndex	= s.GetNumber();
			s.GetToken();	// {
			int nItem		= s.GetNumber();
			while( *s.token != '}' )
			{
				property.m_vItems[iIndex].push_back( nItem );
				nItem	= s.GetNumber();
			}
		}
		s.GetToken();
	}
	return TRUE;
}
예제 #17
0
파일: KsBu.cpp 프로젝트: nykma/ykt4sungard
int main(int argc, char* argv[])
{
	::CoInitialize(NULL);				// 结合SQL SERVER2000使用
	int rtn = 0;
	time_t cur_time;
	time_t last_time;
	time(&last_time);

	g_pSvrLink = BUPubInitialize(g_XBDefines,CallBDFunc,WriteAppInfo,&g_LogFile);
	SetLogShowLevel(0);
	if (argc<2)
		ReadIni("ksbu.ini");
	else
		ReadIni(argv[1]);

	ResetBPFunctions();
	if (argc>2)
	{
		ListBPFunctions(argv[2]);
	}
	
#ifdef _DYNAMIC_LOAD	
	// 加载对接第三方动态库
	if (rtn = g_LoadDll.LoadDataInfo("DataInfo.dll"))
	{
		g_LogFile.WriteLogEx(1002, "加载DataInfo.dll失败--错误码:[%d]", rtn);
		return rtn;
	}
	g_LogFile.WriteLogEx(1002, "加载DataInfo.dll成功");
#endif

	// 初始化第三方数据库信息
#ifdef SYNJONES_FUNC
	if (rtn = InitDB())
	{
		g_LogFile.WriteLogEx(1002, "初始化第三方数据库失败--错误码:[%d]", rtn);
		return rtn;
	}
	g_LogFile.WriteLogEx(1002, "初始化第三方数据库成功");
#endif
	
	// 初始化与BCC连接:
	do 
	{
		rtn = g_pSvrLink->ToLink(&g_BUnit);
		if (rtn==1)
		{
			DEBUG_RUNTIME_MSGOUT("与业务调度中心(BCC)的连接成功!\n");
			break;
		}
		else if (rtn==-100)
		{
			DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
			mysleep(g_BUnit.iHBInterval);
		}
		else
		{
			// 应该属于故障,或对方并不是BCC
			return(rtn);
		}
	} while (1);
#ifdef WIN32
	setnoblockgetch();
#endif

	while (g_pSvrLink->LinkOK())
	{
#ifdef WIN32
		switch (mygetch())
		{
		case '?':
		case 'h':
		case 'H':
			printf("\nCommand List:\n");
			printf("\t ? or h: display this Help informations!\n");
			printf("\t x: To eXit this business unit.\n");
			printf("\t d: Display functions status.\n");
			printf("\t l: List functions status into <function.lst>.\n");
			printf("Enter command to select:");
			break;
		case 'x':
		case 'X':
			g_pSvrLink->bExit = true;
			continue;
			break;
		case 'd':
		case 'D':
			ListBPFunctions(NULL);
			break;
		case 'l':
		case 'L':
			ListBPFunctions("function.lst");
			break;
		}
#endif
		time(&cur_time);
		if (cur_time - last_time > g_ini_para.flash_dealy)
		{
			if (rtn = InitDB())
			{
				g_LogFile.WriteLogEx(1002, "初始化数据库失败:[%d]", rtn);
			}
			last_time = cur_time;
			g_LogFile.WriteLogEx(1002, "初始化数据库成功:[%d]", rtn);
		}

		g_pSvrLink->Processing(&g_BUnit);
		if (g_pSvrLink->bExit) break;
	}

	g_pSvrLink->Close();
	DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
	g_LogFile.Close();

#ifdef _DYNAMIC_LOAD
	CloseDB();
	g_LoadDll.UnLoadAllDll();
#endif
	
	::CoUninitialize();
	return(0);
}
예제 #18
0
파일: ksbu.cpp 프로젝트: nykma/ykt4sungard
int main(int argc,char *argv[])
{
	int rtn;
	int ret=0;
	openlog("yktbank",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL3);
	g_pSvrLink = BUPubInitialize(g_XBDefines,CallBDFunc,WriteAppInfo,&g_LogFile);
	SetLogShowLevel(0);
	if (argc<2)      ReadIni("ksbu.ini");
	else		     ReadIni(argv[1]);

	struct sigaction act,oldact;
	act.sa_handler = handler_alarm;
	if(-1==sigaction(SIGALRM,&act,&oldact))
	{
		writelog(LOG_ERR,"sigaction error,errcode=[%d]",-1);
		return -1;
	}


	ret=ReadIni_bank(&g_Bank);
	if(ret)
	{
		writelog(LOG_ERR,"ReadIni_bank error,errcode=[%d]",ret);
		return -1;
	}

	ResetBPFunctions();
	if (argc>2)
	{
	  ListBPFunctions(argv[2]);
	}

	// 初始化数据库连接:
	/*
	SQLInitialize();
	if (SQLConnectToServer()!=0)
	{
	  RAISE_RUNTIME_ERROR("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
	  return(-100);
	}
	*/
	// 初始化与BCC连接:
	do 
	{
		rtn = g_pSvrLink->ToLink(&g_BUnit);
		if (rtn==1)
		{
			 DEBUG_RUNTIME_MSGOUT("与业务调度中心(BCC)的连接成功!\n");
			 break;
		}
		else if (rtn==-100)
		{
			 DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
			 mysleep(g_BUnit.iHBInterval);
		}
		else
		{
			 // 应该属于故障,或对方并不是BCC
			  DEBUG_RUNTIME_MSGOUT("未知错误\n");
			 return(rtn);
		}
	} while (1);
#ifdef WIN32
   setnoblockgetch();
#endif

/**********************************************************************
 Added by hhd at 2004-09-16
 为了增加签到处理,达到共享内存的处理
 增加共享内存和信号量
 共享内存一共1024个字节,其中使用前18个字节
 shm[0]:代表是否进行过签到的标志,如果为1,已经签过到但不知道是否成功
 		,后续业务将不能进行签到处理,如果为其他值,系统将进行签到
 shm[1]:代表签到是否成功的标志,如果为1,则标识签到成功,后续16个字节为
 		银行正常返回数据,可以使用
 shm[2~17]:前8个字节为加密的PIN密钥,后8个字节为加密的MAC密钥
***********************************************************************/
/**********************************************************************
 Update by hhd at 2004-10-27
 为了增加签到处理,达到共享内存的处理
 增加共享内存和信号量
 为了反映每个终端的当前工作状态,在共享内存中设置一个状态标志
 共享内存一共1024个字节,其中使用前26个字节
 shm[0]:代表是否进行过签到的标志,如果为1,已经签过到但不知道是否成功
 		,后续业务将不能进行签到处理,如果为其他值,系统将进行签到
 shm[1]:代表签到是否成功的标志,如果为1,则标识签到成功,后续16个字节为
 		银行正常返回数据,可以使用
 shm[2]:代表系统重新启动标志,如果不为1,系统进行初始化操作(进行设备
 		注册表中设备的状态的清空操作),然后系统将改标志置为1,其他BU启动
 		跳过该项操作
 shm[10~25]:前8个字节为加密的PIN密钥,后8个字节为加密的MAC密钥
***********************************************************************/
/*
	key_t key;
	struct shmid_ds buf;


// Update by lq at 2005-03-10
// 将创建共享内存和设备签到移到bankguard中去
// 必须先运行bankguard此处操作才能完成

	key=ftok("bankguard",9);
	shmid=shmget(key,SEGSIZE,0666);
	if(-1==shmid)
	{
		printf("errno=%s\n",strerror(errno));
		DEBUG_RUNTIME_MSGOUT("获取共享内存失败,请确保bankguard已经启动\n");
		return 	E_CREATE_SHARE_MEMORY;	
	}
	shm=(char*)shmat(shmid,0,0);
	if((int)shm==-1)
	{
		DEBUG_RUNTIME_MSGOUT("映射共享内存失败");
		return 	E_JOIN_SHARE_MEMORY;	
	}
	semid=semget(key,1,0);
	if(semid==-1)
	{
		DEBUG_RUNTIME_MSGOUT("获取共享锁id失败");
		return E_JOIN_SHARE_MEMORY;
	}
	*/
// Added by hhd end here
   while (g_pSvrLink->LinkOK())
   {
#ifdef WIN32
      switch (mygetch())
      {
      case '?':
      case 'h':
      case 'H':
         printf("\nCommand List:\n");
         printf("\t ? or h: display this Help informations!\n");
         printf("\t x: To eXit this business unit.\n");
         printf("\t d: Display functions status.\n");
         printf("\t l: List functions status into <function.lst>.\n");
         printf("Enter command to select:");
         break;
      case 'x':
      case 'X':
         g_pSvrLink->bExit = true;
         continue;
         break;
      case 'd':
      case 'D':
         ListBPFunctions(NULL);
         break;
      case 'l':
      case 'L':
         ListBPFunctions("function.lst");
         break;
      }
#endif
     // if (!SQLIsConnectOK())
     if(0)
      {
         mysleep(1000);
         if (!g_pSvrLink->CheckLink()) 
            break;  // BCC exit (可能用户发现数据库连接断开,需要维护系统,导致手工将BCC退出同时也需要BU退出)
         //if (SQLConnectToServer()!=0)
	if(0)
         {
            // SQL Link error:
            DEBUG_RUNTIME_MSGOUT("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
         }
         else
         {
            DEBUG_RUNTIME_MSGOUT("与数据库连接成功!\n");
         }
         continue;
      }
      else 
      {   
  	//DEBUG_RUNTIME_MSGOUT("处理bu业务!\n");
         g_pSvrLink->Processing(&g_BUnit);
      }
      //if (g_pSvrLink->bExit) break;
   }


/* ****** Updated by CHENYH at 2004-4-14 11:07:19 ****** 
   经过测试后,CheckLink()工作正常,测试环境为:BCC(WIN)+BU(WIN),BCC(LINUX)+BU(WIN),BCC(LINUX)+BU(LINUX)
   while (1)
   {
      mysleep(1000);
      if (!g_SvrLink.CheckLink())
      {
         printf("TEST CHECK LINK return <false>!\n");
         break;
      }
   }
*/
/*
	shmdt(shm);
	shmctl(shmid,IPC_RMID,&buf);
	d_sem(semid);
*/
	g_pSvrLink->Close();
	// SQLExit();
	DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
	g_LogFile.Close();
	closelog();
	return(0);
}
예제 #19
0
int main(int argc,char *argv[])
{
   int rtn;
   openlog("yktbu",LOG_PID|LOG_CONS|LOG_NDELAY,LOG_LOCAL0);
   g_pSvrLink = BUPubInitialize(g_XBDefines,CallBDFunc,WriteAppInfo,&g_LogFile);
   SetLogShowLevel(0);   
   sprintf(g_szVerNo,"%s %s (%s)",argv[0],YKT_VERSION,__DATE__);
   if(argc==2)
   {
	   if(strncmp(argv[1],"-v",2)==0||strncmp(argv[1],"-V",2)==0)
	   {
		  printf("%s\n",g_szVerNo);
		  closelog();
		  return 0;
	   }
   }
   if (argc<2)
      ReadIni("ksbu.ini");
   else
      ReadIni(argv[1]);

   ResetBPFunctions();
   if (argc>2)
   {
      ListBPFunctions(argv[2]);
   }

   // 初始化数据库连接:
   SQLInitialize();
   if (SQLConnectToServer()!=0)
   {
      DEBUG_RUNTIME_MSGOUT("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
      return(-100);
   }
	 DEBUG_RUNTIME_MSGOUT("连接数据库成功!\n");
   CAccTrans& ats=CAccTrans::GetInst();
   if(ats.LoadCfg()!=0)
   {
	 	
			DEBUG_RUNTIME_MSGOUT("加载系统参数失败!\n");
	   //RAISE_RUNTIME_ERROR("加载数据库账务配置参数失败!\n");
			return(-200);
   }
	 DEBUG_RUNTIME_MSGOUT("加载系统参数成功!\n");
   // 初始化与BCC连接:
   do 
   {
      rtn = g_pSvrLink->ToLink(&g_BUnit);
      if (rtn==1)
      {
         DEBUG_RUNTIME_MSGOUT("与业务调度中心(BCC)的连接成功!\n");
         break;
      }
      else if (rtn==-100)
      {
         DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
         mysleep(g_BUnit.iHBInterval);
      }
      else
      {
         // 应该属于故障,或对方并不是BCC
         return(rtn);
      }
   } while (1);
#ifdef WIN32
   setnoblockgetch();
#endif

   while (g_pSvrLink->LinkOK())
   {
#ifdef WIN32
      switch (mygetch())
      {
      case '?':
      case 'h':
      case 'H':
         printf("\nCommand List:\n");
         printf("\t ? or h: display this Help informations!\n");
         printf("\t x: To eXit this business unit.\n");
         printf("\t d: Display functions status.\n");
         printf("\t l: List functions status into <function.lst>.\n");
         printf("Enter command to select:");
         break;
      case 'x':
      case 'X':
         g_pSvrLink->bExit = true;
         continue;
         break;
      case 'd':
      case 'D':
         ListBPFunctions(NULL);
         break;
      case 'l':
      case 'L':
         ListBPFunctions("function.lst");
         break;
      }
#endif
      if (!SQLIsConnectOK())
      {
         mysleep(1000);
         if (!g_pSvrLink->CheckLink()) 
            break;  // BCC exit (可能用户发现数据库连接断开,需要维护系统,导致手工将BCC退出同时也需要BU退出)
         if (SQLConnectToServer()!=0)
         {
            // SQL Link error:
            DEBUG_RUNTIME_MSGOUT("不能正常建立数据库连接, 检查配置和数据库服务器!\n");
         }
         else
         {
            DEBUG_RUNTIME_MSGOUT("与数据库连接成功!\n");
         }
         continue;
      }
      else 
         g_pSvrLink->Processing(&g_BUnit);
      if (g_pSvrLink->bExit) break;
   }


/* ****** Updated by CHENYH at 2004-4-14 11:07:19 ****** 
   经过测试后,CheckLink()工作正常,测试环境为:BCC(WIN)+BU(WIN),BCC(LINUX)+BU(WIN),BCC(LINUX)+BU(LINUX)
   while (1)
   {
      mysleep(1000);
      if (!g_SvrLink.CheckLink())
      {
         printf("TEST CHECK LINK return <false>!\n");
         break;
      }
   }
*/
   g_pSvrLink->Close();
   SQLExit();
   DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
   g_LogFile.Close();
   closelog();
   return(0);
}
예제 #20
0
파일: KsBu.cpp 프로젝트: nykma/ykt4sungard
int main(int argc, char* argv[])
{
	::CoInitialize(NULL);				// 结合SQL SERVER2000使用

	int rtn;
	char msg[256] = "";
	char *result = NULL;

	g_pSvrLink = BUPubInitialize(g_XBDefines,CallBDFunc,WriteAppInfo,&g_LogFile);
	SetLogShowLevel(0);
	if (argc<2)
		ReadIni("ksbu.ini");
	else
		ReadIni(argv[1]);

	ResetBPFunctions();
	if (argc>2)
	{
		ListBPFunctions(argv[2]);
	}

	if (g_ini_para.dynamic_load_flag)
	{
		// 加载对接第三方动态库
		if (rtn = g_LoadDll.LoadDataInfo(g_ini_para.third_part_dll_name, THIRD_RG_DLL))
		{
			sprintf(msg, "加载%s失败--错误码:[%d]", g_ini_para.third_part_dll_name, rtn);
			g_LogFile.WriteLogEx(1002, msg);
			return rtn;
		}
	}
	
	// 加载desdll库
	if (g_ini_para.des_flag)
	{
		if (rtn = g_desdll.LoadDataInfo(g_ini_para.des_dll_name, DESDLL))
		{
			sprintf(msg, "加载%s失败--错误码:[%d]", g_ini_para.des_dll_name, rtn);
			g_LogFile.WriteLogEx(1002, msg);
			return rtn;
		}

//		encrypt_work_key_asc(g_ini_para.pwd, g_ini_para.encrypt_pwd);
		decrypt_work_key_asc(g_ini_para.encrypt_pwd, g_ini_para.pwd);
	}
	
	if (g_ini_para.debug_log)
	{
		g_LogFile.WriteLogEx(1003, "用户名[%s]--原始密码[%s]--加密密码[%s]--IP地址[%s]--端口号[%d]", g_ini_para.user_id, g_ini_para.pwd, g_ini_para.encrypt_pwd,g_ini_para.ip, g_ini_para.port);
		sprintf(msg, "加载%s成功", g_ini_para.third_part_dll_name);
		g_LogFile.WriteLogEx(1002, msg);
	}

	if (g_ini_para.sysjones_func) 
	{
		result = fInit();
		if (strncmp(result, RG_SUCC, RG_FLAG_LEN))
		{
			sprintf(msg, "初始化第三方数据库失败--错误码:[%d]", rtn);
			g_LogFile.WriteLogEx(1002, msg);
			return rtn;
		}
		g_LogFile.WriteLogEx(1002, "初始化第三方数据库成功");
	}

	// 初始化与BCC连接:
	do 
	{
		rtn = g_pSvrLink->ToLink(&g_BUnit);
		if (rtn==1)
		{
			DEBUG_RUNTIME_MSGOUT("与业务调度中心(BCC)的连接成功!\n");
			break;
		}
		else if (rtn==-100)
		{
			DEBUG_RUNTIME_MSGOUT("估计业务调度中心(BCC)尚未正式启动,或者检查配置中的[SERVER]项参数\n");
			mysleep(g_BUnit.iHBInterval);
		}
		else
		{
			// 应该属于故障,或对方并不是BCC
			return(rtn);
		}
	} while (1);
#ifdef WIN32
	setnoblockgetch();
#endif

	while (g_pSvrLink->LinkOK())
	{
#ifdef WIN32
		switch (mygetch())
		{
		case '?':
		case 'h':
		case 'H':
			printf("\nCommand List:\n");
			printf("\t ? or h: display this Help informations!\n");
			printf("\t x: To eXit this business unit.\n");
			printf("\t d: Display functions status.\n");
			printf("\t l: List functions status into <function.lst>.\n");
			printf("Enter command to select:");
			break;
		case 'x':
		case 'X':
			g_pSvrLink->bExit = true;
			continue;
			break;
		case 'd':
		case 'D':
			ListBPFunctions(NULL);
			break;
		case 'l':
		case 'L':
			ListBPFunctions("function.lst");
			break;
		}
#endif
		g_pSvrLink->Processing(&g_BUnit);
		if (g_pSvrLink->bExit) break;
	}

	g_pSvrLink->Close();
	DEBUG_RUNTIME_MSGOUT("业务处理单元BU系统正常退出!\n");
	g_LogFile.Close();

	if (g_ini_para.dynamic_load_flag)
	{
		g_LoadDll.UnLoadAllDll();
		g_desdll.UnLoadAllDll();
	}
	
	::CoUninitialize();
	return(0);
}