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

📄 dbintf.cpp

📁 电信的97接口程序,用于把话单入库。这里是采用FTP方式采集话单
💻 CPP
📖 第 1 页 / 共 2 页
字号:
								break;
							}
						
						case -13: // change userType from one to the other.
							{
								RTRACE(3, "\n------------------------------Change UserType error------------------------------\n");
								strcpy(buffer, "Can not change UserType.");
								ExecUpdateSQL(now, "2", buffer, &userInterface, odbc);
								break;
							}

						//disconnect database
						case -100:
							{
								RTRACE(3, "\n------------------------------Disconnected sysbase database------------------------------\n");
								break;
							}

						// operate database failed. Error in database
						default:
							{
								RTRACE(3, "\n------------------------------Error. Perhaps in database------------------------------\n");
								ExecUpdateSQL(now, "2", "NULL", &userInterface, odbc);
								break;
							}
						}
						RTRACE(5, "\n------------------------------Sql Finish------------------------------\n");
						odbc->AbortQuery(0);
					}
				}
			}
			else // can't connect database
			{
				CGlobal::Instance()->m_disconnectTimes++;
				if(CGlobal::Instance()->m_disconnectTimes
					>= CGlobal::Instance()->m_maxDisconnectTimes)
				{
					CGlobal::Instance()->m_disconnectTimes = 0;
					if(CDogClient::Instance()->Init() == 0)
					{
						CDogClient::Instance()->SendMsg(e_fatalError,
							"Can't connect database");
						RTRACE(2, "Can't connect database");
						RTRACE(5, "Send message by socket");
						CDogClient::Instance()->Close();
					}
				}
			}

			delete odbc;
			odbc = NULL;
		}
		catch(...)
		{
			RTRACE(2, "Disconnect database suddenly.");
			if(odbc != NULL)
			{
				delete odbc;
				odbc = NULL;
			}
		}

	}
	return 0;
}

// Form Update Sql for the table of 'UserInterface' and exec
void ExecUpdateSQL(char * now, char * flag, char * reason, 
				   UserInterface *userInterface, COdbcFunc * odbc)
{
	char sql[SQL_SIZE];

	strcpy(sql, "update UserInterface set ");
	strcat(sql, "Flag = ");
	strcat(sql, flag);
	strcat(sql, ", SendTime = '");
	strcat(sql, userInterface->sendTime);
	strcat(sql, "', BackTime = '");
	strcat(sql, now);
	if(strcmp(reason, "NULL") != 0 && strcmp(reason, "NULL") != 0)
	{
		strcat(sql, "', AddString = '");
		strcat(sql, reason);
	}
	strcat(sql, "'");
	strcat(sql, " where "); 
//	strcat(sql, userInterface->areaNo);
	strcat(sql, " TeleNumber = '");
	strcat(sql, userInterface->teleNumber);
	strcat(sql, "' and GenTime = '");
	strcat(sql, userInterface->genTime);
	strcat(sql, "' and (Flag = 0 or Flag is NULL)");
	RTRACE(5, sql);
	odbc->ExecSQL(sql, 0); 
}

/*
void test()
{
	char serialno[21];
	char porttype[11];

	COdbcFunc * odbc = new COdbcFunc();
		// connect successfully
	if(odbc->Connect("oracledb", "zzz", "zoohoo") == 0)
	{
		odbc->SetAutoCommit(false); 
		odbc->AddResult(0);
		odbc->ExecSQL("update userinterface set flag = 6");
		odbc->ExecSQL("rollback"); 
		odbc->ExecSQL("update userinterface set operatetype = -1", 0);
		odbc->ExecSQL("commit"); 
//		int iErrExc = odbc->ExecSQL("aaaa");
		int iRes = odbc->ExecSQL("select PORTTYPE, SERIALNO, BeginTime from jk_sheet_control");
		if(iRes == 0) // execute successly
		{
			while(odbc->Next() == 0)
			{
				struct tm tm1;
				odbc->GetFieldValue(1, serialno, sizeof(serialno));
				odbc->GetFieldValue(2, porttype, sizeof(porttype));
				odbc->GetFieldValue(3, &tm1);

				RTRACE(6, "serialno = " << serialno);
				RTRACE(6, "porttype = " << porttype);
				RTRACE(6, "beginTime = " << tm1.tm_hour);

				int flag;
				char dt[20], tele[20];
				odbc->AddResult(0);
				odbc->ExecSQL("select Flag, BackTime, TeleNumber from UserInterface", 0);
				while(odbc->Next(0) == 0)
				{
					odbc->GetFieldValue(1, &flag, 0);
					odbc->GetFieldValue(2, dt, sizeof(dt), 0);
					odbc->GetFieldValue(3, tele, sizeof(tele), 0);
					RTRACE(6, "flag = " << flag);
					RTRACE(6, "dt = " << dt);
					RTRACE(6, "tele = " << tele);
				}
			}
		}
	}
	delete odbc;
}
*/
//int SaveDB(PStringArray line);
/*
int HandleFtp()
{
	RTRACE(2, "Begin ftp loop");
	if ( CGlobal::Instance()->m_isShutdown == 1 )
		return -1;

	PFTPClient ftp;
	int j = 0;
	
//	RTRACE(5, "FtpSrv NUMBER:" << CGlobal::Instance()->m_ftpNum);
	for(int i=0;i<CGlobal::Instance()->m_oradbNum;i++)
	{
		try
		{
			if ( ftp.Connect(PIPSocket::Address(CGlobal::Instance()->m_negGkList[i].m_ip), 
				CGlobal::Instance()->m_negGkList[i].m_port) == false )
			{
				RTRACE(2, "Connect fail");
				continue;
				//return 0;
			}

			if ( ftp.LogIn(CGlobal::Instance()->m_username[i], CGlobal::Instance()->m_password[i]) == false )
			{
				RTRACE(2, "Login fail");
				continue;
				//return 0;
			}

			PStringArray fileArray = ftp.GetDirectoryNames(PFTP::ShortNames);	//, PFTP::NormalPort);
			RTRACE(5, "Files: " << fileArray);

			// treat those files.
			for ( j=0; j<fileArray.GetSize(); j++) {
//				begin to get every file, and save it to local disk
//				CGlobal::Instance()->m_serviceType = 700;
//				CGlobal::Instance()->GetServiceTypeFromFileName(fileArray[j]); 
//				RTRACE(5, fileArray[j] << " FileType:" << CGlobal::Instance()->m_serviceType);
				PTCPSocket * pSock = ftp.GetFile(fileArray[j]);		//, PFTP::NormalPort);
				if ( pSock == NULL ) 
				{
					RTRACE(2, "Read file: " << fileArray[j] << " fail!");
					continue;
				}

				PString str;
				int count = 0;

				while(pSock->Read(str.GetPointer(count+1000)+count, 1000))
					count += pSock->GetLastReadCount();
				str.SetSize(count+1);

				delete pSock;
				RTRACE(5, "Response:" << ftp.ReadResponse());

				PFile save;
				PString pfileName;
				pfileName = CGlobal::Instance()->m_localDir;
				pfileName += "\\";
				pfileName += fileArray[j];
				RTRACE(5, pfileName);
				save.Open(pfileName, PFile::WriteOnly);
				save.WriteString(str);
				save.Close();

				RTRACE(4, "Read size:" << count+1);
				RTRACE(6, ", context:\n" << str);

				if ( SaveDB(str.Lines()) == 0 )
				{
					RTRACE(5, "Get cdr success");

					// delete this file.
					if ( ftp.ExecuteCommand(PFTP::DELE, fileArray[j])/100 == 2 ) 
					{
						RTRACE(5, "Del success: " << fileArray[j]);
					}
					else 
					{
						RTRACE(2, "Del fail: " << fileArray[j]);
					}
				}
			}
			ftp.Close();
		}
		catch(...)
		{
			RTRACE(2, "Connect to Ftp Server " << PIPSocket::Address(CGlobal::Instance()->m_negGkList[i].m_ip) << "error");
		}
	}
	return 0;
}
*/

// the connect time is bigger than 48 hours
// and it's 2~4 o'clock 
// restart the service
void reconnectSession()
{
	long timeLong = CGlobal::Instance()->m_irrFrequency *
		CGlobal::Instance()->m_connectTime;

	// get the datetime of now
	time_t tNow;
	struct tm * tmNow;
	time(&tNow);
	tmNow = localtime(&tNow);

	if(tmNow->tm_hour >= 2 && tmNow->tm_hour <= 4
		&& timeLong > 48 * 60 * 60)
	{
		CGlobal::Instance()->m_connectTime = 0;
		CGlobal::Instance()->m_disconnectTimes = 0;

		if(CDogClient::Instance()->Init() == 0)
		{
			CDogClient::Instance()->SendMsg(e_fatalError,
				"Restart service for long time work");
			RTRACE(3, "Restart service for long time work");
			RTRACE(5, "Send message by socket");
			CDogClient::Instance()->Close();
		}
	}
}

⌨️ 快捷键说明

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