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

📄 ylfbusysysmsgfile.cpp

📁 七号信令解码器
💻 CPP
字号:
// ylfBusySysMsgFile.cpp: implementation of the ylfBusySysMsgFile class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MsgDetail.h"
#include "ylfBusySysMsgFile.h"
#include "ylfCommon.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


ylfBusySysMsgFile::ylfBusySysMsgFile()
{
	pBuffer=NULL;
	BufLen=0;
}

ylfBusySysMsgFile::~ylfBusySysMsgFile()
{
	if(pBuffer!=NULL)delete[] pBuffer;
}
void ylfBusySysMsgFile::Add(BYTE *pData)
{

}

void ylfBusySysMsgFile::Clear()
{

}

void ylfBusySysMsgFile::NewBuffer(int len)
{
	if(pBuffer!=NULL)delete[] pBuffer;
	pBuffer=new BYTE[len];
	BufLen=len;
}

void ylfBusySysMsgFile::LoadEnd()
{

}

BYTE* ylfBusySysMsgFile::GetBuffer()
{
	return pBuffer;
}
#define COLCOUNT 6
void ylfBusySysMsgFile::BuildColumns(CListCtrl &listc)
{
	int nWidth[COLCOUNT]={
			60,90,90,130,130,200};
	CString strColumn[COLCOUNT]={
		"ID","主叫","被叫",
		"开始时间","结束时间","原因"
	};
	int nFmt[COLCOUNT]={
		LVCFMT_RIGHT,LVCFMT_RIGHT,LVCFMT_RIGHT,LVCFMT_LEFT,LVCFMT_LEFT,LVCFMT_LEFT
	};
	ylfCommon::BuildColumns(listc,COLCOUNT,nWidth,strColumn,nFmt);
}

void ylfBusySysMsgFile::UpdateList(CListCtrl &listc)
{
	listc.DeleteAllItems();
	BYTE data1[100];
	int pos=0;
	int& MSG_FILE_POS=*((int*)(data1+pos));pos+=4;
	char* CALLED_NO=(char*)(data1+pos);pos+=20;
	char* CALLING_NO=(char*)(data1+pos);pos+=20;
	char* IAM_TIME=(char*)(data1+pos);pos+=20;
	char* END_TIME=(char*)(data1+pos);pos+=20;
	int& IAM_TIME_MSEC=*((int*)(data1+pos));pos+=4;
	int& REL_TIME_MSEC=*((int*)(data1+pos));pos+=4;
	int& RELEASE_CODE=*((int*)(data1+pos));pos+=4;

	int count=BufLen/100;
	int line=0;
	CString str;
	char msg[200];
	for(int i=0;i<count;i++)
	{
		if(i%2==0&&i!=0)
		{
			str="****";
			listc.InsertItem(100000,str,0);
			line++;
		}
		memcpy(data1,pBuffer+i*100,100);
		str.Format("%d",MSG_FILE_POS);
		line=listc.InsertItem(100000,str,0);
		listc.SetItemText(line, 1, CALLING_NO);
		listc.SetItemText(line, 2, CALLED_NO);
		listc.SetItemText(line, 3, IAM_TIME);
		listc.SetItemText(line, 4, END_TIME);
		ylfCommon::GetRecasueString(RELEASE_CODE,msg,200);
		listc.SetItemText(line, 5, msg);
		line++;
	}
}

void ylfBusySysMsgFile::UpdateCDRMsg(UINT filepos,CString filePath, CShowMsgList &msgList)
{
	CFile f;
	if(!f.Open(filePath,CFile::modeRead))
	{
		AfxMessageBox("打不开原始cdr文件");
		return;
	}
	CTime endT=CTime::GetCurrentTime()+CTimeSpan(0,0,0,20);
	UINT msgFilePos=filepos;
	int n=0;
	WORD msglen=0;
	UINT id=0;
	BYTE msgBuf[500];
	while(msgFilePos!=0xffffffff)
	{
		if(CTime::GetCurrentTime()>endT)break;
		int len=f.GetLength();
		if(msgFilePos>=len)break;
		f.Seek(msgFilePos,CFile::begin);

		int off=0;

		n=f.Read(&msglen,2);
		if(n!=2||msglen<6||msglen>300)
		{
			AfxMessageBox("原始cdr文件格式错");
			break;
		}
		n=f.Read(&id,4);if(n<4)break;
		BYTE nfile;
		n=f.Read(&nfile,1);if(n<1)break;

		msgFilePos=id;

		n=f.Read(msgBuf+2,msglen-7);if(n<msglen-7)break;

		*((WORD*)msgBuf)=msglen-5;
		if(!msgList.Add(msgBuf+2))
		{
			break;
		}
	}

	f.Close();
}

⌨️ 快捷键说明

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