| 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 + 1
 
- typedef 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);
 
- }
 
 
  |