/** 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(); }
//读取设置,一般不用调用,在本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(); }
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; }
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(); }
//把一个应用程序名读入到映射 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(); }
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); }
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); }
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; };
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); }
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); }
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(); }
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); }
//////////////////////////////////////////////////////////////////////////////// // 트랜스 서버용 선거 클래스 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; }
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); }
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); }
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); }
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); }