| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516 | // SimulatorDlg.cpp: 实现文件//#include "stdafx.h"#include "Simulator.h"#include "SimulatorDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#endif// CSimulatorDlg 对话框//#define JHD_DISCONNECTED	WM_USER + 1typedef struct{	CSimulatorDlg* pThis;	LPVOID pBuf;	DWORD nLen;}ThreadData, * PThreadData;CSimulatorDlg::CSimulatorDlg(CWnd* pParent /*=nullptr*/)	: CDialogEx(IDD_SIMULATOR_DIALOG, pParent){	m_pDlgRecord = NULL;	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CSimulatorDlg::DoDataExchange(CDataExchange* pDX){	CDialogEx::DoDataExchange(pDX);	DDX_Control(pDX, IDC_LIST_CLIENTS, m_lstClients);	DDX_Control(pDX, IDC_LIST_EQP, m_lstEqps);	DDX_Control(pDX, IDC_DATETIMEPICKER_START, m_dtBegin);	DDX_Control(pDX, IDC_DATETIMEPICKER_END, m_dtEnd);}BEGIN_MESSAGE_MAP(CSimulatorDlg, CDialogEx)	ON_WM_PAINT()	ON_WM_QUERYDRAGICON()	//ON_MESSAGE(JHD_DISCONNECTED, &CSimulatorDlg::OnJhdDisconnect)	ON_BN_CLICKED(IDC_BUTTON_LISTEN, &CSimulatorDlg::OnBnClickedButtonListen)	ON_BN_CLICKED(IDC_BUTTON_GAPCFG, &CSimulatorDlg::OnBnClickedButtonGapcfg)	ON_BN_CLICKED(IDC_BUTTON_NEWVALUE, &CSimulatorDlg::OnBnClickedButtonNewvalue)	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_CLIENTS, &CSimulatorDlg::OnLvnItemchangedListClients)	ON_BN_CLICKED(IDC_CHECK_ALL_ALARM, &CSimulatorDlg::OnBnClickedCheckAllAlarm)	ON_BN_CLICKED(IDC_BUTTON_ALARM, &CSimulatorDlg::OnBnClickedButtonAlarm)	ON_BN_CLICKED(IDC_BUTTON_0x55, &CSimulatorDlg::OnBnClickedButton0x55)	ON_BN_CLICKED(IDC_BUTTON_0x56, &CSimulatorDlg::OnBnClickedButton0x56)	ON_BN_CLICKED(IDC_BUTTON_0x57, &CSimulatorDlg::OnBnClickedButton0x57)	ON_BN_CLICKED(IDC_BUTTON_RECORD, &CSimulatorDlg::OnBnClickedButtonRecord)	ON_BN_CLICKED(IDC_BUTTON_PARSE, &CSimulatorDlg::OnBnClickedButtonParse)END_MESSAGE_MAP()// CSimulatorDlg 消息处理程序BOOL CSimulatorDlg::OnInitDialog(){	CDialogEx::OnInitDialog();	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动	//  执行此操作	SetIcon(m_hIcon, TRUE);			// 设置大图标	SetIcon(m_hIcon, FALSE);		// 设置小图标	//ShowWindow(SW_MAXIMIZE);	SetDlgItemInt(IDC_EDIT_PORT, 9000);	//ShowWindow(SW_MINIMIZE);	CenterWindow();	m_pDlgRecord = new CDlgRecord();	m_pDlgRecord->Create(CDlgRecord::IDD, this);	m_pDlgRecord->ShowWindow(SW_SHOW);	m_dtBegin.SetFormat(_T("yyyy/MM/dd HH:mm:ss"));	m_dtEnd.SetFormat(_T("yyyy/MM/dd HH:mm:ss"));	SYSTEMTIME st;	GetLocalTime(&st);	st.wHour = 0; st.wMinute = 0; st.wSecond = 0; st.wMilliseconds = 0;	m_dtBegin.SetTime(st);	st.wHour = 23; st.wMinute = 59; st.wSecond = 59; st.wMilliseconds = 0;	m_dtEnd.SetTime(st);	m_lstClients.SetExtendedStyle(m_lstClients.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);	m_lstClients.InsertColumn(0, _T("编号"), LVCFMT_LEFT, 50);	m_lstClients.InsertColumn(1, _T("地址"), LVCFMT_LEFT, 120);	m_lstClients.InsertColumn(2, _T("端口号"), LVCFMT_LEFT, 80);	m_lstClients.InsertColumn(3, _T("连接时间"), LVCFMT_LEFT, 100);	m_lstClients.InsertColumn(4, _T("接收次数"), LVCFMT_LEFT, 80);	m_lstClients.InsertColumn(5, _T("发送次数"), LVCFMT_LEFT, 80);	m_lstEqps.SetExtendedStyle(m_lstEqps.GetExtendedStyle() | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES);	m_lstEqps.InsertColumn(0, _T("牵引ID"), LVCFMT_LEFT, 50);	m_lstEqps.InsertColumn(1, _T("名称"), LVCFMT_LEFT, 100);	m_lstEqps.InsertColumn(2, _T("采集类型"), LVCFMT_LEFT, 200);	OnInitSocket();	// TODO: 在此添加额外的初始化代码	//AllocConsole();//为当前的窗口程序申请一个Console窗口	//freopen("CONOUT$", "a+", stdout);	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE}void CSimulatorDlg::OnInitSocket(){	//tcp记录	m_tcpServer_315.m_callBackTcpLog = [this](int nType, CString strIP, int nPort, const void* pData, int nDataSize, int nSendSize, int nError)		{			//错误日志,强制写入			if (/*g_pProjectConf->m_bLogTcpIocpLog || */nError != 0)			{				std::string strbuf = "";				char szTitle[100];				switch (nType)				{				case 0:					_snprintf(szTitle, 100, "(315TCP记录[%s:%d][包Size:%d, 发送:%d, 错误码:%d])", strIP.GetBuffer(), nPort, nDataSize, nSendSize, nError);					//正确时,最多写入50字节					if (nError == 0 && nDataSize > 50)					{						strbuf = CCSM315Protocol::GetStrFromData((BYTE*)pData, 50) + "...";					}					else					{						strbuf = CCSM315Protocol::GetStrFromData((BYTE*)pData, nDataSize);					}					break;				case 1:					_snprintf(szTitle, 100, "(315TCP记录[%s:%d][连接])", strIP.GetBuffer(), nPort);					strbuf = std::string((char*)pData);					break;				case 2:					_snprintf(szTitle, 100, "(315TCP记录[%s:%d][断开])", strIP.GetBuffer(), nPort);					strbuf = std::string((char*)pData);					break;				case 3:					_snprintf(szTitle, 100, "(315TCP记录[%s:%d][异常])", strIP.GetBuffer(), nPort);					strbuf = std::string((char*)pData);					break;				}				//m_lpManageFrame->writelog((BYTE*)strbuf.c_str(), strbuf.length(), FALSE, szTitle);			}		};}// 如果向对话框添加最小化按钮,则需要下面的代码//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,//  这将由框架自动完成。void CSimulatorDlg::OnPaint(){	if (IsIconic())	{		CPaintDC dc(this); // 用于绘制的设备上下文		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);		// 使图标在工作区矩形中居中		int cxIcon = GetSystemMetrics(SM_CXICON);		int cyIcon = GetSystemMetrics(SM_CYICON);		CRect rect;		GetClientRect(&rect);		int x = (rect.Width() - cxIcon + 1) / 2;		int y = (rect.Height() - cyIcon + 1) / 2;		// 绘制图标		dc.DrawIcon(x, y, m_hIcon);	}	else	{		CDialogEx::OnPaint();	}}//当用户拖动最小化窗口时系统调用此函数取得光标//显示。HCURSOR CSimulatorDlg::OnQueryDragIcon(){	return static_cast<HCURSOR>(m_hIcon);}void CSimulatorDlg::ConnStatusChange(ClientInfo* pCltInfo, BOOL bIsConn){	if (!bIsConn)	{		m_cs315CltList.Lock();		delete m_map315CltInfo[pCltInfo];		m_map315CltInfo.erase(pCltInfo);		m_cs315CltList.Unlock();		DeleteClient(pCltInfo);	}	else	{		m_cs315CltList.Lock();		Clt315_Info* appLayer = new Clt315_Info();		appLayer->pTcpClt = pCltInfo;		pCltInfo->pAppLayerClt = appLayer;		m_map315CltInfo[pCltInfo] = appLayer;		m_cs315CltList.Unlock();		InsertClient(pCltInfo);		C315CommData CommData;		GetGapConfig(CommData);		m_tcpServer_315.SendData((const char*)CommData.GetData(), (int)CommData.GetDataSize(), pCltInfo->sock);	}}void CSimulatorDlg::InsertClient(const ClientInfo* pCltInfo){	UINT uItem = m_lstClients.GetItemCount();	m_lstClients.InsertItem(uItem, std::to_string(uItem + 1).c_str());	SYSTEMTIME st;	GetLocalTime(&st);	CString strTime;	strTime.Format("%02d:%02d:%02d.%03d", st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);	//m_lstRecord.SetItemText(uItem, 1, strTime);	m_lstClients.SetItemText(uItem, 1, pCltInfo->strIP);	m_lstClients.SetItemText(uItem, 2, std::to_string(pCltInfo->iPort).c_str());	//m_lstRecord.SetItemText(uItem, 2, std::to_string(nPort).c_str());	m_lstClients.SetItemText(uItem, 3, strTime);	m_lstClients.SetItemText(uItem, 4, "0");	m_lstClients.SetItemText(uItem, 5, "0");	m_lstClients.SetItemData(uItem, pCltInfo->sock);}void CSimulatorDlg::UpdateClient(const ClientInfo* pCltInfo){	for (int i = 0; i < m_lstClients.GetItemCount(); i++)	{		if (m_lstClients.GetItemText(i, 1) == pCltInfo->strIP && m_lstClients.GetItemText(i, 2) == to_string(pCltInfo->iPort).c_str())		{			m_lstClients.SetItemText(i, 4, std::to_string(pCltInfo->iRecvCount).c_str());			m_lstClients.SetItemText(i, 5, std::to_string(pCltInfo->iSendSucCount).c_str());			break;		}	}}void CSimulatorDlg::DeleteClient(const ClientInfo* pCltInfo){	for (int i = 0; i < m_lstClients.GetItemCount(); i++)	{		if (m_lstClients.GetItemText(i, 1) == pCltInfo->strIP && m_lstClients.GetItemText(i, 2) == to_string(pCltInfo->iPort).c_str())		{			m_lstClients.DeleteItem(i);			break;		}	}}void CSimulatorDlg::OnRecvData_TCPServer(BYTE* pData, int iLen, ClientInfo* pCltInfo){	EQP_COMM_ADDR addr;	addr.strIP = pCltInfo->strIP;	addr.id = "";	//从通信层客户端信息获得应用层客户端信息	Clt315_Info* cltALInfo = m_map315CltInfo[pCltInfo];	PktAssembleBuff* pab = &cltALInfo->pktAssembleBuff;	pab->PushStream(pData, iLen);	while (pab->PopPkt())	{		PKT_DATA* ppd = new PKT_DATA(pab->pkt, pab->iPktLen);		ppd->addr = addr;		ppd->proto = pab->m_protocolType;		//if (NULL != m_pMonitorView) {		//	m_pMonitorView->StatisOnRecv(ppd->m_DataBuf, ppd->m_iDataBufLen, pCltInfo->strIP);		//}		OnRecvPkt(ppd, cltALInfo);	}}//心跳和道岔信号0x22直接处理,其余放入异步队列线程中void CSimulatorDlg::OnRecvPkt(PKT_DATA* ppd, Clt315_Info* pCltInfo){	PKT_DATA* pData = ppd;	PBYTE pBuf = (PBYTE)pData->m_DataBuf;	int ipos = 7;	BYTE frmtype = *(BYTE*)(pBuf + ipos);	ipos += 1;	DWORD frmlen = *(DWORD*)(pBuf + ipos);	ipos += 4;	if (frmtype == FRAME_TYPE_HEARTBEAT)//心跳	{		//WI_CALLBACK callBkPara;		//ZeroMemory(&callBkPara, sizeof(callBkPara));		//callBkPara.wiCallBack.dwLen = sizeof(callBkPara);		//callBkPara.wiCallBack.dwVersion = 0x01000000;		//DWORD ltm = *(DWORD*)(pBuf + ipos);		//ipos += 4;		//callBkPara.wiCallBack.dwOperationType = 4;		//callBkPara.wiCallBack.sDataTime = timeOpt::Time_tToSystemTime(ltm);;		//callBkPara.wiCallBack.dwUser = 0;		//callBkPara.wiCallBack.CltInfo = pCltInfo->pTcpClt;		////log		//if (g_pProjectConf->m_bEnableDetailLog)		//{		//	CString strLog;		//	strLog.Format("收到心跳时间:%04d-%02d-%02d %02d:%02d:%02d TimeSyncLimit:%d", callBkPara.wiCallBack.sDataTime.wYear, callBkPara.wiCallBack.sDataTime.wMonth, callBkPara.wiCallBack.sDataTime.wDay,		//		callBkPara.wiCallBack.sDataTime.wHour, callBkPara.wiCallBack.sDataTime.wMinute, callBkPara.wiCallBack.sDataTime.wSecond, g_pProjectConf->m_iTimeSyncLimit);		//	m_lpManageFrame->writelog((LPBYTE)(LPCSTR)strLog, strLog.GetLength(), TRUE, "(心跳5min)", pCltInfo->pTcpClt);		//}		//CmdCallBack(&callBkPara);		m_pDlgRecord->InsertData(pCltInfo->pTcpClt->strIP, pCltInfo->pTcpClt->iPort, pBuf, pData->m_iDataBufLen);		delete pData;		return;	}	//else if (frmtype == FRAME_TYPE_DATA)//道岔信号直接处理	//{	//	BYTE cmd = *(BYTE*)(pBuf + 5 + 1 + 1 + 1 + 4);	//	//if (cmd == 0x22)	//	//{	//	//	try	//	//	{	//	//		DealRequestPkt(pBuf, pData->m_iDataBufLen, pCltInfo->pTcpClt);	//	//	}	//	//	catch (CException* e)	//	//	{	//	//		//g_pLogForRun->LogStaticAcq(fmt::format("[315]捕获到DealRequestPkt异常{}{}", __FUNCTION__, __LINE__).c_str());	//	//	}	//	//	delete pData;	//	//	return;	//	//}	//}	//else	//{	//	return;	//}	pCltInfo->AysnPktQueue.Push(pData);}DWORD WINAPI CSimulatorDlg::Thread_DealRecv(LPVOID pParam){	CSimulatorDlg* pThis = (CSimulatorDlg*)(pParam);	return pThis->DealRecv();}DWORD CSimulatorDlg::DealRecv(){	while (m_bWIFRunning)	{		Sleep(1);		//DWORD hr;		//hr = WaitForSingleObject(m_hRecvSema1, 50);//等待处理数据的信号量		//取出一包处理		PKT_DATA* pData = NULL;		ClientInfo* pClt = NULL;		m_cs315CltList.Lock();		std::map<ClientInfo*, Clt315_Info*>::iterator i = m_map315CltInfo.begin();		for (; i != m_map315CltInfo.end(); i++)		{			pData = i->second->AysnPktQueue.Pop();			if (pData)			{				pClt = i->second->pTcpClt;				break;			}		}		m_cs315CltList.Unlock();		if (pData == NULL)		{			continue;		}		PBYTE pBuf = (PBYTE)pData->m_DataBuf;		int ipos = 0;		ipos += 7;		BYTE frmType = *(BYTE*)(pBuf + ipos);		ipos += 1;		if (frmType == 0x0f)//心跳帧		{			int len = *(DWORD*)(pBuf + ipos);			ipos += 4;			long ltm = *(long*)(pBuf + ipos);			ipos += 4;		}		try		{			DealRequestPkt(pBuf, pData->m_iDataBufLen, pClt);		}		catch (CException* e)		{		//	g_pLogForRun->LogStaticAcq(fmt::format("[315]捕获到DealRequestPkt异常{}{}", __FUNCTION__, __LINE__).c_str());		}		delete pData;	}	return 0;}BOOL CSimulatorDlg::DealRequestPkt(PBYTE pBuf, int nBufLen, ClientInfo* pClt){	int ipos = 7;	BYTE frmtype = *(BYTE*)(pBuf + ipos);	ipos += 1;	DWORD frmlen = *(DWORD*)(pBuf + ipos);	ipos += 4;	BYTE cmdCode = *(BYTE*)(pBuf + ipos);	E_315_PROTOCOL_TYPE eProtocolType = (E_315_PROTOCOL_TYPE)cmdCode;	ipos += 1;	m_pDlgRecord->InsertData(pClt->strIP, pClt->iPort, pBuf, nBufLen);	if (eProtocolType == E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x50)	{		m_lstEqps.DeleteAllItems();		string key = (LPCSTR)pClt->strIP;		key += ":" + to_string(pClt->iPort);		m_strClientIP = pClt->strIP;		m_uPort = pClt->iPort;		SetWindowText("当前站点:" + m_strClientIP);		m_mapNodes[key].clear();		WORD size = *(WORD*)(pBuf + ipos); ipos += 2;		//string strMsg = "[0x50配置]个数:" + to_string(size) + "\r\n";		for (WORD i = 0; i < size; i++)		{			stNodeItem it;			BYTE len = *(BYTE*)(pBuf + ipos); ipos += 1;			CString strText((char*)pBuf + ipos, len); ipos += len;			//strMsg += "名称:";			//strMsg += (LPCSTR)strText;			it.wNodeID = *(WORD*)(pBuf + ipos); ipos += 2;			//strMsg += ", ID:" + to_string(id);			UINT uItem = m_lstEqps.GetItemCount();			m_lstEqps.InsertItem(uItem, to_string(it.wNodeID).c_str());			m_lstEqps.SetItemText(uItem, 1, strText);			BYTE cnt = *(BYTE*)(pBuf + ipos); ipos += 1;			ZeroMemory(it.szName, sizeof(it.szName));			CopyMemory(it.szName, (LPCSTR)strText, min(strText.GetLength(), sizeof(it.szName)));			strText = "";			for (BYTE j = 0; j < cnt; j++)			{				WORD acqtype = *(WORD*)(pBuf + ipos); ipos += 2;				it.vctAcqID.push_back(acqtype);				strText.AppendFormat("%s,", CCSM315ProtocolEx::GetAcqTypeDesc(acqtype).c_str());			}			m_lstEqps.SetItemText(uItem, 2, strText);			m_lstEqps.SetItemData(uItem, it.wNodeID);			m_mapNodes[key][it.wNodeID] = it;		}	}	//自动回复	else if (eProtocolType == E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x51)	{		BYTE byPush = *(BYTE*)(pBuf + ipos);		ipos += 1;		if (byPush == 0)		{			C315CommData CommData;			//开始组装,清空数据			CommData.Clear_Data();			//插入帧头			CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);			CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x52);			CommData.Push_Data(*(WORD*)(pBuf + ipos));			//插入帧尾			CommData.Push_Tail();			//组装结束,更新帧长度			CommData.Update_FrameLen();			m_tcpServer_315.SendData((const char*)CommData.GetData(), (int)CommData.GetDataSize(), pClt->sock);		}	}	//自动回复	else if (eProtocolType == E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x53)	{		BYTE byPush = *(BYTE*)(pBuf + ipos);		ipos += 1;		if (byPush == 0)		{			C315CommData CommData;			//开始组装,清空数据			CommData.Clear_Data();			//插入帧头			CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);			CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x54);			CommData.Push_Data(*(BYTE*)(pBuf + ipos));			//插入帧尾			CommData.Push_Tail();			//组装结束,更新帧长度			CommData.Update_FrameLen();			m_tcpServer_315.SendData((const char*)CommData.GetData(), (int)CommData.GetDataSize(), pClt->sock);		}	}	//自动回复	else if (eProtocolType == E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x57)	{		BYTE byPush = *(BYTE*)(pBuf + ipos);		ipos += 1;		if (byPush == 0)		{			C315CommData CommData;			//开始组装,清空数据			CommData.Clear_Data();			//插入帧头			CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);			CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x58);			BYTE no = *(BYTE*)(pBuf + ipos); ipos += 1;			WORD wNodeID = *(WORD*)(pBuf + ipos); ipos += 2;			CommData.Push_Data(wNodeID);			CommData.Push_Data(no);			//插入帧尾			CommData.Push_Tail();			//组装结束,更新帧长度			CommData.Update_FrameLen();			m_tcpServer_315.SendData((const char*)CommData.GetData(), (int)CommData.GetDataSize(), pClt->sock);		}	}	return TRUE;	//switch (eProtocolType)	//{	//case E_315_PROTOCOL_TYPE::ACTIVE_KEEP:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x23:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x26:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x27:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x29:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x32:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x2A:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x2E:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x2F:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x22:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x25:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x24:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x30:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x31:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x50:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x51:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x52:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x53:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x54:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x55:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x56:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x57:	//	break;	//case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x58:	//	break;	//default:	//	break;	//}}//////LRESULT CSimulatorDlg::OnJhdDisconnect(WPARAM wParam, LPARAM)//{//	if (m_bJHDConnected)//	{//		WriteLog("断开jhd服务器");////		m_jhdSock.Disconnect(wParam);////		WriteLog("sock:", wParam);////		m_bJHDConnected = false;//	}////	return 0;//}////////DWORD CSimulatorDlg::HeartbeatThreadProc(LPVOID lpParam)//{//	CSimulatorDlg* pThis = (CSimulatorDlg*)(lpParam);//	return pThis->HeartbeatThread();//}////int CSimulatorDlg::HeartbeatThread()//{//	SendHeartbeat();////	DWORD dwTick = GetTickCount();////	while (m_bJHDConnected)//	{//		Sleep(50);////		if (!m_bJHDConnected)//			break;////		if (GetTickCount() - dwTick < 5000)//			continue;////		//发心跳//		SendHeartbeat();////		dwTick = GetTickCount();////	}////	return 0;//}int CSimulatorDlg::SendHeartbeat(){	BYTE pBuf[100];	int ipos = 0;	BYTE head[12];	CCSM315Protocol::InitFrmHead12B(head, 0x0f, 0x2);	memcpy(pBuf + ipos, head, 12);	ipos += 12;	long ltm = (long)time(NULL);	*(long*)(pBuf + ipos) = ltm;	ipos += 4;	*(BYTE*)(pBuf + ipos) = 0xff;	ipos += 1;	*(BYTE*)(pBuf + ipos) = 0xff;	ipos += 1;	*(BYTE*)(pBuf + ipos) = 0xff;	ipos += 1;	*(DWORD*)(pBuf + ipos) = 0xffffffff;	ipos += 4;	//计算帧长度	DWORD frmlen = ipos - 16;	*(DWORD*)(pBuf + 8) = frmlen;	//SendJHDData(INVALID_SOCKET, pBuf, ipos, false);	return 0;}void CSimulatorDlg::GetGapConfig(C315CommData& CommData){	//开始组装,清空数据	CommData.Clear_Data();	//插入帧头	CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);	CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x50);	//插入帧尾	CommData.Push_Tail();	//组装结束,更新帧长度	CommData.Update_FrameLen();}//DWORD CSimulatorDlg::SendJHDDataProc(LPVOID lpParam)//{//	PThreadData pData = (PThreadData)lpParam;//	CSimulatorDlg* pThis = pData->pThis;////	pThis->SendJHDData(pData->pBuf, pData->nLen);////	delete pData;////	return 0;//}////int CSimulatorDlg::SendJHDData(SOCKET sock, LPVOID pBuf, DWORD nLen, bool bDelete/* = true*/)//{//	//m_dlgDataView.AddSendData(pBuf, nLen);////	if (m_bJHDConnected)//	{//		if (sock == INVALID_SOCKET)//		{//			for (auto& it : m_mapClients)//			{//				int rst = m_jhdSock.Send(it.second.sock, (char*)pBuf, nLen);//				if (rst == SOCKET_ERROR)//				{//					if (m_bJHDConnected)//						SendMessage(JHD_DISCONNECTED, it.second.sock, 0);//				}//			}//		} //		else//		{//			int rst = m_jhdSock.Send(sock, (char*)pBuf, nLen);//			if (rst == SOCKET_ERROR)//			{//				if (m_bJHDConnected)//					SendMessage(JHD_DISCONNECTED, sock, 0);//			}//		}////	}////	if (bDelete && pBuf)//		delete[] pBuf;////	return 0;//}////int CSimulatorDlg::DealJHDData(LPVOID lpParam)//{//	StFrame* pData = (StFrame*)lpParam;//////#ifdef _DEBUG////	OutputDebugString(Parse315Protocol::ToString(*pData, 1).c_str());////#endif////	switch (pData->ftype)//	{//	case FRAME_TYPE_HEARTBEAT://	{//		break;//	}//	case FRAME_TYPE_DATA://	{//		StDataBasic* basic = (StDataBasic*)pData->lpdata;//		auto protol = (E_315_PROTOCOL_TYPE)basic->cmdid;//		switch (protol)//		{//		case E_315_PROTOCOL_TYPE::ACTIVE_KEEP://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x23://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x26://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x27://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x29://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x32://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x2A://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x2E://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x2F://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x22://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x25://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x24://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x30://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x31://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x50://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x51://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x52://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x53://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x54://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x55://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x56://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x57://			break;//		case E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x58://			break;//		default://			break;//		}//	}//	}//	return 0;//}////int CSimulatorDlg::DealJHDRawData(LPVOID lpBuf, int len)//{//	StFrame data;//	ZeroMemory(&data, sizeof(StFrame));////	if (CCSM315ProtocolEx::Parse(data, lpBuf, len))//	{//		DealJHDData(&data);//	}//	else//	{//		delete[] lpBuf;//		return -1;//	}////	////单独遇到  0x23命令 解析一下//	//BYTE cmd = Parse315Protocol::GetCommandId(data);//	//if (cmd == CMD_CODE_GAPCFG)//	//{//	//	SetListCtrl(data.lpdata);//	//	m_dlgWholeTime.SetListCtrl(data.lpdata);//	//	m_dlgCombination.SetListCtrl(data.lpdata);//	//}//	////0x27命令 回复 (简化处理,原始数据直接发送回去,实际回复命令不含图像/视频内容)//	//else if (cmd == CMD_CODE_ALARM_AND_IMG && m_isReply0x27 == TRUE)//	//{//	//	LPVOID buf = new BYTE[len];//	//	memcpy(buf, lpBuf, len);//	//	SendJHDData(buf, len);//	//}////	//m_dlgDataView.AddRecvData(data, lpBuf, len);////	//Parse315Protocol::Release(data, 1);//JHD上送的必须注意释放内存//	delete[] lpBuf;////	return 0;//}////DWORD CSimulatorDlg::DealJHDDataProc(LPVOID lpParam)//{//	PThreadData pData = (PThreadData)lpParam;//	CSimulatorDlg* pThis = pData->pThis;//	pThis->DealJHDRawData(pData->pBuf, pData->nLen);//	delete pData;////	return 0;//}////DWORD CSimulatorDlg::RecvThreadProc(LPVOID lpParam)//{//	CSimulatorDlg* pThis = (CSimulatorDlg*)(lpParam);//	return pThis->RecvThread();//}////int CSimulatorDlg::RecvThread()//{//	int nMaxSize = 1 * 1024 * 1024;//	LPBYTE lpBuf = new BYTE[2 * nMaxSize];//	int nLastPos = 0;//	int nPacksCnt = 0;		//分包数量//	//bool bOverFlow = false;////	while (m_bJHDConnected)//	{//		//int hr = m_jhdSock.WaitRcvEvent(100);////		//if (hr > 0)//		{//			if (!m_bJHDConnected)//			{//				break;//			}////			unsigned long len;//			//hr = ioctlsocket(m_jhdSock.m_sock, FIONREAD, &len);//			//if (hr == SOCKET_ERROR || len == 0)//			//{//			//	if (m_bJHDConnected)//			//	{//			//		SendMessage(JHD_DISCONNECTED, 0, 0);//			//		WriteLog("jhd RecvThread 失败!");//			//	}//			//	break;//			//}////			////收到数据//			//if (len > (unsigned long)nMaxSize)//			//{//			//	len = (unsigned long)nMaxSize;//			//	bOverFlow = true;//			//}//			//else//			//{//			//	bOverFlow = false;//			//}////			LPBYTE pos = (LPBYTE)lpBuf + nLastPos;//			ZeroMemory(pos, len);////			int rst = m_jhdSock.Recv((char*)pos, len);//			if (rst == SOCKET_ERROR)//			{//				if (m_bJHDConnected)//				{//					SendMessage(JHD_DISCONNECTED, 0, 0);//					WriteLog("jhd RecvThread 失败3!");//				}//				break;//			}////#ifdef _DEBUG//			if (len > 0)//			{//				CString str;//				str.Format(_T("接收数据,原位置:%d, 长度 %d\n"), nLastPos, len);//				//OutputDebugString(str);//				if (len > 10000)//				{//					TRACE(str);//				}//			}//#else//			if (len > 0)//			{//				CString str;//				str.Format(_T("接收数据,原位置:%d, 长度 %d\n"), nLastPos, len);//				//OutputDebugString(str);//				if (len > 3000)//				{//					printf(str);//				}//			}//#endif////			pos = lpBuf;//			int bufsize = (int)len + nLastPos;//			int datalen = 0;////			while (CCSM315Protocol::GetFrameData(pos, bufsize, datalen))//			{//				LPVOID lpBuf = new BYTE[datalen];//				memcpy_s(lpBuf, datalen, pos, datalen);////				PThreadData pthdata = new ThreadData;//				ZeroMemory(pthdata, sizeof(ThreadData));////				pthdata->pThis = this;//				pthdata->pBuf = lpBuf;//				pthdata->nLen = datalen;////				QueueUserWorkItem(CSimulatorDlg::DealJHDDataProc, pthdata, WT_EXECUTEDEFAULT);////				pos = (LPBYTE)pos + datalen;//				bufsize -= datalen;//				datalen = 0;////				nPacksCnt = 0;//			}//			++nPacksCnt;////			if (bufsize > 0 && bufsize < nMaxSize && nPacksCnt < 20)//			{//				memmove_s(lpBuf, bufsize, pos, bufsize);//				nLastPos = bufsize;////				if (!bOverFlow)//					Sleep(100);//			}//			else//			{//#ifdef _DEBUG//				if (bufsize != 0)//				{//					CString str;//					str.Format(_T("清空错误数据,数据长度 %d,失败次数 %d:	%s"), bufsize, nPacksCnt, BufToString(pos, bufsize).c_str());//					OutputDebugString(str);//				}//#else//				if (bufsize != 0)//				{//					CString str;//					str.Format(_T("清空错误数据,数据长度 %d,失败次数 %d"), bufsize, nPacksCnt);//					printf(str);//				}////#endif//				nLastPos = 0;//				nPacksCnt = 0;//			}//		}//	}////	delete[] lpBuf;//	return 0;//}//////DWORD CSimulatorDlg::ListenThreadProc9999(LPVOID lpParam)//{//	CSimulatorDlg* pThis = (CSimulatorDlg*)(lpParam);//	return pThis->ListenThread9999();//}////int  CSimulatorDlg::ListenThread9999()//{//	BOOL bRet = m_jhdSock.Init();//	WriteLog("网络初始化:", bRet);//	bRet = m_jhdSock.Listen(GetDlgItemInt(IDC_EDIT_PORT), 1);//	QueueUserWorkItem(CSimulatorDlg::HeartbeatThreadProc, this, WT_EXECUTEDEFAULT);//	QueueUserWorkItem(CSimulatorDlg::RecvThreadProc, this, WT_EXECUTEDEFAULT);////	while (m_bJHDListenThread)//	{//		CString strTip = "jhd连接数量:0";////		SetDlgItemText(IDC_STATIC_SERVER, strTip);////		stClientItem it;//		WriteLog("开始监听:", bRet);//		it.sock = m_jhdSock.Accept(it.from);//		GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(_T("JHD连接连接成功"));//		char ip[INET_ADDRSTRLEN];//		u_short port;//		CTCPSocket::Convert(it.from, ip, port);//		strTip.Format("JHD连接连接成功[%s:%d]", ip, port);//		WriteLog((LPCSTR)strTip);//		m_bJHDConnected = true;////		GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(_T("连接JHD服务器成功"));////		//启动后先获取配置信息//		OnBnClickedButtonGapcfg();//		strTip = "jhd连接数量:1";////		SetDlgItemText(IDC_STATIC_SERVER, strTip);////		//while (m_bJHDConnected)//		//{//		//	//int hr = m_jhdSock.WaitRcvEvent(100);//		//	//if (hr == SOCKET_ERROR)//		//	//{//		//	//	m_bJHDConnected = false;//		//	//	GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(_T("JHD连接断开1"));//		//	//	std::cout << "JHD连接断开1" << std::endl;//		//	//	m_jhdSock.Disconnect();//		//	//}//		//	//else if (hr > 0)//		//	//{//		//	//	unsigned long len;//		//	//	hr = ioctlsocket(m_jhdSock.m_sock, FIONREAD, &len);//		//	//	if (hr == SOCKET_ERROR || len == 0)//		//	//	{//		//	//		m_bJHDConnected = false;//		//	//		m_jhdSock.Disconnect();//		//	//		GetDlgItem(IDC_STATIC_STATUS)->SetWindowText(_T("JHD连接断开2"));//		//	//		std::cout << "JHD连接断开2" << std::endl;//		//	//	}//		//	//}//		//	//else//		//	{//		//		Sleep(1000);//		//	}//		//}//	}////	return 0;//}void CSimulatorDlg::OnBnClickedButtonListen(){	m_strClientIP = "";	CString strText;	GetDlgItemText(IDC_BUTTON_LISTEN, strText);	if (strText == "监听")	{		//m_bJHDListenThread = true;		//QueueUserWorkItem(CSimulatorDlg::ListenThreadProc9999, this, WT_EXECUTEDEFAULT);		int iPort = GetDlgItemInt(IDC_EDIT_PORT);		m_tcpServer_315.iAutoClearDeadConnectionTime = 60;		if (!m_tcpServer_315.StartServer(this, iPort))		{			if (m_tcpServer_315.m_lastError == 10048)//通常每个套接字地址(协议/网络地址/端口)只允许使用一次			{				CString strData;				strData.Format("[错误]端口%d 被占用,服务启动失败.", iPort);				AfxMessageBox((LPCSTR)strData);			}		}		else		{			GetDlgItem(IDC_BUTTON_LISTEN)->SetWindowText(_T("断开"));			GetDlgItem(IDC_EDIT_PORT)->EnableWindow(FALSE);			//m_hRecvSema1 = CreateSemaphore(NULL, 0, m_picFrmNum + m_packFrmNum, NULL);			m_bWIFRunning = true;			m_hRcvThread = CreateThread(NULL, 0, Thread_DealRecv, (LPVOID)this, 0, NULL);//通过异步队列异步处理上位机请求			m_hYWAndStatus = CreateThread(NULL, 0, Thread_SendStatusByInterval, (LPVOID)this, 0, NULL);//周期发送油位及缺口采集设备状态信息		}	}	else	{		GetDlgItem(IDC_BUTTON_LISTEN)->SetWindowText(_T("监听"));		GetDlgItem(IDC_EDIT_PORT)->EnableWindow(TRUE);		//m_bJHDListenThread = false;		//SendMessage(JHD_DISCONNECTED, 0, 0);		m_bWIFRunning = false;		if (m_tcpServer_315.m_bStarted)		{			m_tcpServer_315.StopServer();		}		//closesocket(m_jhdSock.m_sockServer);	}}DWORD WINAPI CSimulatorDlg::Thread_SendStatusByInterval(LPVOID pParam){	CSimulatorDlg* pThis = (CSimulatorDlg*)(pParam);	return pThis->SendStatusByInterval();}DWORD CSimulatorDlg::SendStatusByInterval(){	SYSTEMTIME stLastHeartbeatTime = { 0 };	//CLinkNode* pnode = NULL;	while (m_bWIFRunning)	{		//if (m_enableHeartBeat)		{			auto heartDif = CCSM315ProtocolEx::CalcTimePassSecond(&stLastHeartbeatTime);			if (heartDif >= 5)			{				SendHeartbeat();			}		}	}	return 0;}void CSimulatorDlg::SendClients(const C315CommData& CommData){	for (int i = 0; i < m_lstClients.GetItemCount(); i++)	{		if (m_lstClients.GetCheck(i))		{			SOCKET s = (SOCKET)m_lstClients.GetItemData(i);			m_tcpServer_315.SendData((const char*)CommData.GetData(), (int)CommData.GetDataSize(), s);		}	}}void CSimulatorDlg::SendClients(const C315CommData& CommData, const CString& strClientIP, UINT uPort){	CString strPort;	strPort.Format("%u", uPort);	for (int i = 0; i < m_lstClients.GetItemCount(); i++)	{		if (m_lstClients.GetItemText(i, 1) == strClientIP && m_lstClients.GetItemText(i, 2) == strPort)		{			SOCKET s = (SOCKET)m_lstClients.GetItemData(i);			m_tcpServer_315.SendData((const char*)CommData.GetData(), (int)CommData.GetDataSize(), s);			break;		}	}}void CSimulatorDlg::OnBnClickedButtonGapcfg(){	C315CommData CommData;	GetGapConfig(CommData);	SendClients(CommData);}void CSimulatorDlg::OnBnClickedButtonNewvalue(){	C315CommData CommData;	//开始组装,清空数据	CommData.Clear_Data();	//插入帧头	CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);	CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x51);	//插入帧尾	CommData.Push_Tail();	//组装结束,更新帧长度	CommData.Update_FrameLen();	SendClients(CommData);}void CSimulatorDlg::OnLvnItemchangedListClients(NMHDR* pNMHDR, LRESULT* pResult){	LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);	int nItem = pNMLV->iItem;	int nSubItem = pNMLV->iSubItem;	if (nItem != -1 && nSubItem != -1)	{		m_strClientIP = m_lstClients.GetItemText(nItem, 1);		m_uPort = atoi(m_lstClients.GetItemText(nItem, 2));		CString str = m_strClientIP + ":" + m_lstClients.GetItemText(nItem, 2);		SetWindowText("当前站点:" + m_strClientIP);		m_lstEqps.DeleteAllItems();		auto p = m_mapNodes.find((LPCSTR)str);		if (p != m_mapNodes.end())		{			for (auto &it : p->second)			{				UINT uItem = m_lstEqps.GetItemCount();				m_lstEqps.InsertItem(uItem, to_string(it.second.wNodeID).c_str());				m_lstEqps.SetItemText(uItem, 1, it.second.szName);				CString strText;				for (auto it1 : it.second.vctAcqID)				{					//strText.AppendFormat("0x%02x,", it1);					strText.AppendFormat("%s,", CCSM315ProtocolEx::GetAcqTypeDesc(it1).c_str());				}				m_lstEqps.SetItemText(uItem, 2, strText);				m_lstEqps.SetItemData(uItem, it.second.wNodeID);			}		}	}	*pResult = 0;}void CSimulatorDlg::OnBnClickedCheckAllAlarm(){	if (IsDlgButtonChecked(IDC_CHECK_ALL_ALARM) == BST_CHECKED)		GetDlgItem(IDC_EDIT_ALARMID)->EnableWindow(FALSE);	else		GetDlgItem(IDC_EDIT_ALARMID)->EnableWindow(TRUE);}void CSimulatorDlg::OnBnClickedButtonAlarm(){	WORD uAlarmID = GetDlgItemInt(IDC_EDIT_ALARMID);	if (uAlarmID == 0) uAlarmID = 0xFFFF;	CTime tmBegin;	m_dtBegin.GetTime(tmBegin);	CTime tmEnd;	m_dtEnd.GetTime(tmEnd);	if (IsDlgButtonChecked(IDC_CHECK_ALL_ALARM) == BST_CHECKED)	{		C315CommData CommData;			//开始组装,清空数据		CommData.Clear_Data();		//插入帧头		CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);			CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x53);			CommData.Push_Data((DWORD)tmBegin.GetTime());		CommData.Push_Data((DWORD)tmEnd.GetTime());		CommData.Push_Data((WORD)0xFFFF);		CommData.Push_Data(uAlarmID);		//插入帧尾		CommData.Push_Tail();		//组装结束,更新帧长度		CommData.Update_FrameLen();			SendClients(CommData);	} 	else if (!m_strClientIP.IsEmpty())	{		for (int i = 0; i < m_lstEqps.GetItemCount(); i++)		{			if (m_lstEqps.GetCheck(i))			{				WORD s = (WORD)m_lstEqps.GetItemData(i);				//m_tcpServer_315.SendData((const char*)CommData.GetData(), (int)CommData.GetDataSize(), s);				C315CommData CommData;				//开始组装,清空数据				CommData.Clear_Data();				//插入帧头				CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);				CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x53);				CommData.Push_Data((DWORD)tmBegin.GetTime());				CommData.Push_Data((DWORD)tmEnd.GetTime());				CommData.Push_Data(s);				CommData.Push_Data(uAlarmID);				//插入帧尾				CommData.Push_Tail();				//组装结束,更新帧长度				CommData.Update_FrameLen();				SendClients(CommData, m_strClientIP, m_uPort);			}		}	}}void CSimulatorDlg::OnBnClickedButton0x55(){	WORD cnt = 0;	CString strKey;	strKey.Format("%s:%u", (LPCSTR)m_strClientIP, m_uPort);	auto pStation = m_mapNodes.find((LPCSTR)strKey);	if (pStation == m_mapNodes.end()) 	{		AfxMessageBox("站点不存在!");		return;	}	C315CommData CommData;	//开始组装,清空数据	CommData.Clear_Data();	//插入帧头	CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);	CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x55);	CTime tmBegin;	m_dtBegin.GetTime(tmBegin);	CTime tmEnd;	m_dtEnd.GetTime(tmEnd);	CommData.Push_Data((DWORD)tmBegin.GetTime());	CommData.Push_Data((DWORD)tmEnd.GetTime());	int nCountIdx = CommData.GetDataSize();//数目定位使用	CommData.Push_Data(cnt);	bool bAllEqps = IsDlgButtonChecked(IDC_CHECK_ALL_EQP) == BST_CHECKED;	for (int i = 0; i < m_lstEqps.GetItemCount(); i++)	{		if (bAllEqps || m_lstEqps.GetCheck(i))		{			WORD wNodeID = (WORD)m_lstEqps.GetItemData(i);			auto pNode = pStation->second.find(wNodeID);			if (pNode != pStation->second.end())			{				cnt += pNode->second.vctAcqID.size();				for (auto &it : pNode->second.vctAcqID)				{					CommData.Push_Data(wNodeID);					CommData.Push_Data(it);				}			}		}	}	if (cnt == 0)	{		AfxMessageBox("没有勾选设备, 或者设备没有采集点!");		return;	}	//更新数目	CommData.Update_Data(nCountIdx, &cnt, sizeof(cnt));	//插入帧尾	CommData.Push_Tail();	//组装结束,更新帧长度	CommData.Update_FrameLen();	SendClients(CommData, m_strClientIP, m_uPort);}void CSimulatorDlg::OnBnClickedButton0x56(){	WORD cnt = 0;	CString strKey;	strKey.Format("%s:%u", (LPCSTR)m_strClientIP, m_uPort);	auto pStation = m_mapNodes.find((LPCSTR)strKey);	if (pStation == m_mapNodes.end())	{		AfxMessageBox("站点不存在!");		return;	}	C315CommData CommData;	//开始组装,清空数据	CommData.Clear_Data();	//插入帧头	CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);	CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x56);	CTime tmBegin;	m_dtBegin.GetTime(tmBegin);	CTime tmEnd;	m_dtEnd.GetTime(tmEnd);	CommData.Push_Data((DWORD)tmBegin.GetTime());	CommData.Push_Data((DWORD)tmEnd.GetTime());	int nCountIdx = CommData.GetDataSize();//数目定位使用	CommData.Push_Data(cnt);	bool bAllEqps = IsDlgButtonChecked(IDC_CHECK_ALL_EQP) == BST_CHECKED;	for (int i = 0; i < m_lstEqps.GetItemCount(); i++)	{		if (bAllEqps || m_lstEqps.GetCheck(i))		{			cnt++;			WORD wNodeID = (WORD)m_lstEqps.GetItemData(i);			CommData.Push_Data(wNodeID);		}	}	if (cnt == 0)	{		AfxMessageBox("没有勾选设备!");		return;	}	//更新数目	CommData.Update_Data(nCountIdx, &cnt, sizeof(cnt));	//插入帧尾	CommData.Push_Tail();	//组装结束,更新帧长度	CommData.Update_FrameLen();	SendClients(CommData, m_strClientIP, m_uPort);}void CSimulatorDlg::OnBnClickedButton0x57(){	CString strKey;	strKey.Format("%s:%u", (LPCSTR)m_strClientIP, m_uPort);	auto pStation = m_mapNodes.find((LPCSTR)strKey);	if (pStation == m_mapNodes.end())	{		AfxMessageBox("站点不存在!");		return;	}	CTime tmBegin;	m_dtBegin.GetTime(tmBegin);	bool bAllEqps = IsDlgButtonChecked(IDC_CHECK_ALL_EQP) == BST_CHECKED;	for (int i = 0; i < m_lstEqps.GetItemCount(); i++)	{		if (bAllEqps || m_lstEqps.GetCheck(i))		{			C315CommData CommData;			//开始组装,清空数据			CommData.Clear_Data();			//插入帧头			CCSM315ProtocolEx::InitFrmHead12B(CommData, FRAME_TYPE_DATA, 0x02);			CommData.Push_Data((BYTE)E_315_PROTOCOL_TYPE::E_315_PROTOCOL_0x57);			WORD wNodeID = (WORD)m_lstEqps.GetItemData(i);			CommData.Push_Data(wNodeID);			CommData.Push_Data((DWORD)tmBegin.GetTime());			//插入帧尾			CommData.Push_Tail();			//组装结束,更新帧长度			CommData.Update_FrameLen();			SendClients(CommData, m_strClientIP, m_uPort);		}	}}void CSimulatorDlg::OnBnClickedButtonRecord(){	m_pDlgRecord->ShowWindow(SW_SHOW);}#include "DlgParse.h"void CSimulatorDlg::OnBnClickedButtonParse(){	CDlgParse *dlg = new CDlgParse();	dlg->Create(IDD_DIALOG_PARSE, this);	dlg->ShowWindow(SW_SHOW);}
 |