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

📄 infonet.cpp

📁 高速公路收费系统车道软件. 功能: 1 检测公路过往车辆 2 收费过程控制和数据采集 3 车辆信息和图片上传服务器.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
}

//	处理参数文件的起始帧
void CMessageNet::BeginWriteFile(unsigned char *ReceiveData,int FileIndex)
{
	FileCheckSum=0;						//文件校验和赋初值
	int nMaxLength=0;
	switch(FileIndex){
	case TFRMB_NEW_INDEX:
		nMaxLength=8;
		strRMB.Empty();
		break;
	case COLLECOD_INDEX:
		nMaxLength=12;
		strCollectList.Empty();
		break;
	case BLACKCOL_INDEX:
		nMaxLength=5;
		strBlackList.Empty();
		break;
	case BLACKCAR_INDEX:
		nMaxLength=10;
		strBlackCarList.Empty();
		break;
	case MONTHCAR_INDEX:
		nMaxLength=16;
		strMonthCarList.Empty();
		break;
	case FREECAR_INDEX:
		nMaxLength=16;
		strFreeCarList.Empty();
		break;	
	case DELAYS_INDEX:
		nMaxLength=2;
		strDelayList.Empty();
		break;	
	}

	SaveData(ReceiveData+8,nMaxLength,FileIndex);
	bReceiveFlag[FileIndex]=TRUE;	

}

//	处理参数文件的中间帧
void CMessageNet::ContinueWriteFile(unsigned char *ReceiveData,int FileIndex)
{
	int nMaxLength=0;
	switch(FileIndex){
	case TFRMB_NEW_INDEX:
		nMaxLength=8;	
		break;
	case COLLECOD_INDEX:
		nMaxLength=12;
		break;
	case BLACKCOL_INDEX:
		nMaxLength=5;		
		break;
	case BLACKCAR_INDEX:
		nMaxLength=10;		
		break;
	case MONTHCAR_INDEX:
		nMaxLength=16;		
		break;
	case FREECAR_INDEX:
		nMaxLength=16;
		break;	
	case DELAYS_INDEX:
		nMaxLength=2;
		break;	
	}
	SaveData(ReceiveData+8,nMaxLength,FileIndex);
}

//	处理参数文件的结束帧,若校验和正确,向上位机发确认信号并更新相应
//	的文件;否则,发接收文件错误信号并删除收到的错误数据
void CMessageNet::EndWriteFile(unsigned char *ReceiveData,int FileIndex)
{
	char CheckSumStr[3],tmpStr[10],chStatus;
	memset(tmpStr,0,10);
	memmove(tmpStr,ReceiveData,8);
	memset(CheckSumStr,0,3);
	itoa(FileCheckSum,CheckSumStr,10);		//本程序计算出的校验和
	if(strlen(CheckSumStr)==1){
		CheckSumStr[1]=CheckSumStr[0];
		CheckSumStr[0]='0';
	}
	
	if((CheckSumStr[0]!=ReceiveData[8])||(CheckSumStr[1]!=ReceiveData[9])){
		switch(FileIndex){
		case TFRMB_NEW_INDEX:			
			strRMB.Empty();
			break;
		case COLLECOD_INDEX:
			strCollectList.Empty();
			break;
		case BLACKCOL_INDEX:
			strBlackList.Empty();
			break;
		case BLACKCAR_INDEX:
			strBlackCarList.Empty();
			break;
		case MONTHCAR_INDEX:
			strMonthCarList.Empty();
			break;
		case FREECAR_INDEX:
			strFreeCarList.Empty();
			break;	
		case DELAYS_INDEX:
			strDelayList.Empty();
			break;	
		}
		chStatus='0';						//接收错误
	} else {
		chStatus='1';						//接收正确
		if(FileIndex!=INVALID_INDEX){
			UpdateFile(FileIndex);
		} else {
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_REPEAT_SEND,0,(LPARAM)&FatchMesg);
		}
	}
//	若接收文件标志bReceiveFlag为真,生成AK消息;否则,本帧可能是由于
//	通信错误而收费站重新下发的E帧
	if(!bReceiveFlag[FileIndex]) return;
	if(FileIndex==TFRMB_NEW_INDEX)
		FileIndex=TFRMB_INDEX;
		
	CRecord m_clsRecord;

	m_clsRecord.AkIndex(FileIndex);
	m_clsRecord.AkStatus(chStatus);
	
	m_clsRecord.RecordAK();
}

//	记录收到的数据帧
void CMessageNet::SaveData(unsigned char *ReceiveData, int MaxLen, int FileIndex)
{
	int i;
	char j,WriteBuff[20];
	CString MemoryStr;
	MemoryStr.Empty();
	while(*ReceiveData!=0xfe){		//循环处理数据直到帧结束
		i=0;
		memset(WriteBuff,0,20);
		while((*ReceiveData!=0x1e)&&(*ReceiveData!=0xfe)&&(i<MaxLen)){
			WriteBuff[i]=*ReceiveData;
			j=FileCheckSum;
			FileCheckSum=(j+(*ReceiveData))%100;
			i++;
			ReceiveData=ReceiveData+1;;
		}
		if(*ReceiveData!=0xfe){		//处理间隔符(0x1e)
			MemoryStr=MemoryStr+(char *)WriteBuff;
			ReceiveData=ReceiveData+1;
		}
	}
	switch(FileIndex){
	case BLACKCOL_INDEX:
		strBlackList+=MemoryStr;
		break;
	case FREECAR_INDEX:
		strFreeCarList+=MemoryStr;
		break;
	case MONTHCAR_INDEX:
		strMonthCarList+=MemoryStr;
		break;		
	case BLACKCAR_INDEX:
		strBlackCarList+=MemoryStr;
		break;
	case COLLECOD_INDEX:
		strCollectList+=MemoryStr;
		break;
	case DELAYS_INDEX:
		strDelayList+=MemoryStr;
		break;
	case TFRMB_NEW_INDEX:
		strRMB+=MemoryStr;
		break;
	}	
	
}
//	将接收到的文件写入硬盘。注意:接收到的价格文件应写为新价格文件,
//	因为可能该价格的生效日期尚未到达
void CMessageNet::UpdateFile(int FileIndex)
{
	FILE *fp1;
	char tmpStr[44];
	int Position=0,DataLength;
	int ReadLength;	
	CString MemoryStr;
	try{	
		switch(FileIndex){
		case TFRMB_NEW_INDEX:
			if(strRMB.IsEmpty()){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
				return;
			}
			if((fp1=fopen(TFRMB_NEW,"w"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"更新新价格文件失败\n");
				return;
			}
			MemoryStr=strRMB;
			memset(tmpStr,0,44);
			if(MemoryStr.GetLength()<8) return;
			memmove(tmpStr,MemoryStr.GetBuffer(8),8);//生效日期
			fputs(tmpStr,fp1);					
			fputc('\n',fp1);
			Position=8;
			memset(tmpStr,0,44);
			if(MemoryStr.GetLength()<Position+4) return;
			memmove(tmpStr,MemoryStr.GetBuffer(Position+4)+Position,4);
			fputs(tmpStr,fp1);					//生效时间
			fputc('\n',fp1);
			Position=Position+4;
			DataLength=MemoryStr.GetLength();
			ReadLength=4;   //每次读4个字符
			while(1){
				if(Position>=DataLength) break;
				memset(tmpStr,0,44);
				if(MemoryStr.GetLength()<Position+ReadLength) break;
				memmove(tmpStr,MemoryStr.GetBuffer(Position+ReadLength)+Position,ReadLength);
				fputs(tmpStr,fp1);
				fputc('\n',fp1);
				Position+=ReadLength;			
			}
			fclose(fp1);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
			return;
		case COLLECOD_INDEX:
			if(strCollectList.IsEmpty()){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
				return;
			}
			if((fp1=fopen(COLLECOD_FILE,"w"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"更新操作员文件失败\n");
				return;
			}
			MemoryStr=strCollectList;
			if(MemoryStr.GetLength()<12) return;
			DataLength=MemoryStr.GetLength();
			ReadLength=12;   //每次读12个字符
			while(1){
				if(Position>=DataLength) break;
				memset(tmpStr,0,44);
				if(MemoryStr.GetLength()<Position+ReadLength) break;
				memmove(tmpStr,MemoryStr.GetBuffer(Position+ReadLength)+Position,ReadLength);
				fputs(tmpStr,fp1);
				fputc('\n',fp1);
				Position+=ReadLength;			
			}
			fclose(fp1);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
			return;
		case BLACKCOL_INDEX:
			if(strBlackList.IsEmpty()){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
				return;
			}
			if((fp1=fopen(BLACKCOL_FILE,"w"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"更新操作员黑名单文件失败\n");
				return;
			}		
			MemoryStr=strBlackList;
			if(MemoryStr.GetLength()<5) return;
			DataLength=MemoryStr.GetLength();
			ReadLength=5;   //每次读5个字符
			while(1){
				if(Position>=DataLength) break;
				memset(tmpStr,0,44);
				if(MemoryStr.GetLength()<Position+ReadLength) break;
				memmove(tmpStr,MemoryStr.GetBuffer(Position+ReadLength)+Position,ReadLength);
				fputs(tmpStr,fp1);
				fputc('\n',fp1);
				Position+=ReadLength;			
			}
			fclose(fp1);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
			return;
		case DELAYS_INDEX:
			if(strDelayList.IsEmpty()){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
				return;
			}
			if((fp1=fopen(DELAYS_FILE,"w"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"更新延时表文件失败\n");
				return;
			}
			MemoryStr=strDelayList;
			if(MemoryStr.GetLength()<6) return;
			DataLength=MemoryStr.GetLength();
			ReadLength=2;   //每次读2个字符
			while(1){
				if(Position>=DataLength) break;
				memset(tmpStr,0,44);
				if(MemoryStr.GetLength()<Position+ReadLength) break;
				memmove(tmpStr,MemoryStr.GetBuffer(Position+ReadLength)+Position,ReadLength);
				fputs(tmpStr,fp1);
				fputc('\n',fp1);
				Position+=ReadLength;			
			}
			fclose(fp1);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
			return;
		case BLACKCAR_INDEX:
			if(strBlackCarList.IsEmpty()){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
				return;
			}
			if((fp1=fopen(BLACKCAR_FILE,"w"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"更新黑名单车文件失败\n");
				return;
			}
			MemoryStr=strBlackCarList;
			if(MemoryStr.GetLength()<10) return;
			DataLength=MemoryStr.GetLength();
			ReadLength=10;   //每次读10个字符
			while(1){
				if(Position>=DataLength) break;
				memset(tmpStr,0,44);
				if(MemoryStr.GetLength()<Position+ReadLength) break;
				memmove(tmpStr,MemoryStr.GetBuffer(Position+ReadLength)+Position,ReadLength);
				fputs(tmpStr,fp1);
				fputc('\n',fp1);
				Position+=ReadLength;			
			}
			fclose(fp1);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
			return;
		case MONTHCAR_INDEX:
			if(strMonthCarList.IsEmpty()){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
				return;
			}
			if((fp1=fopen(MONTHCAR_FILE,"w"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"更新月票车文件失败\n");
				return;
			}
			MemoryStr=strMonthCarList;
			if(MemoryStr.GetLength()<16) return;
			DataLength=MemoryStr.GetLength();
			ReadLength=16;   //每次读16个字符
			while(1){
				if(Position>=DataLength) break;
				memset(tmpStr,0,44);
				if(MemoryStr.GetLength()<Position+ReadLength) break;
				memmove(tmpStr,MemoryStr.GetBuffer(Position+ReadLength)+Position,ReadLength);
				fputs(tmpStr,fp1);
				fputc('\n',fp1);
				Position+=ReadLength;			
			}
			fclose(fp1);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
			return;
		case FREECAR_INDEX:
			if(strFreeCarList.IsEmpty()){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
				return;
			}
			if((fp1=fopen(FREECAR_FILE,"w"))==NULL){
				SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"更新免征车文件失败\n");
				return;
			}
			MemoryStr=strFreeCarList;
			if(MemoryStr.GetLength()<16) return;
			DataLength=MemoryStr.GetLength();
			ReadLength=16;   //每次读16个字符
			while(1){
				if(Position>=DataLength) break;
				memset(tmpStr,0,44);
				if(MemoryStr.GetLength()<Position+ReadLength) break;
				memmove(tmpStr,MemoryStr.GetBuffer(Position+ReadLength)+Position,ReadLength);
				fputs(tmpStr,fp1);
				fputc('\n',fp1);
				Position+=ReadLength;			
			}
			fclose(fp1);
			SendMessage(theApp.m_pMainWnd->m_hWnd,WM_UPDATE_OK,UPDATE_FILE,FileIndex);
			return;
		default:
			return;
		}	
	}
	catch(...){
		SendMessage(theApp.m_pMainWnd->m_hWnd,WM_ABNORMAL,0,(LPARAM)"CMessageNet::UpdateFile()出现异常\n");
	}
}

⌨️ 快捷键说明

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