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

📄 mttestdlg.cpp

📁 一个卫通GPS系统SUC接口示例。该示例演示如何实现客户端如何与卫通GPS系统连接实现车载终端点名等功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	pRs->Open(_bstr_t(strSQL), _variant_t((IDispatch *)m_pConn,true), adOpenStatic,
		adLockOptimistic, adCmdText);

	if(pRs->BOF && pRs->adoEOF)
	{
		MessageBox("没有记录!");
		return;
	}

	pRs->MoveFirst();

    CString strGps_time, strGps_longitude, strGps_latitude;
	CString strGps_direction, strGps_speed, strAlarm_info;

	//将查询结果显示到位置信息列表中
	while(!pRs->adoEOF)
	{
	    strSID = pRs->GetCollect("SID").bstrVal;
	    strGps_longitude.Format("%f", pRs->GetCollect("gps_longitude").dblVal);
	    strGps_latitude.Format("%f", pRs->GetCollect("gps_latitude").dblVal);
	    strGps_speed.Format("%f", pRs->GetCollect("gps_speed").dblVal);
	    strGps_direction.Format("%f", pRs->GetCollect("gps_direction").dblVal);



		VARIANT vtTime;
		pRs->get_Collect(_variant_t("gps_time"), &vtTime);

		COleDateTime ttt;
    	ttt = vtTime;
		strGps_time = ttt.Format(_T("%Y-%m-%d %H:%M:%S"));	    
		
		
		
		strAlarm_info.Format("%d", pRs->GetCollect("alarm_info").lVal);

		m_ctrlPosList.InsertItem(0, strSID);
		m_ctrlPosList.SetItemText(0, 1, strGps_longitude);
		m_ctrlPosList.SetItemText(0, 2, strGps_latitude);
		m_ctrlPosList.SetItemText(0, 3, strGps_speed);
		m_ctrlPosList.SetItemText(0, 4, strGps_direction);
		m_ctrlPosList.SetItemText(0, 5, strGps_time);
		m_ctrlPosList.SetItemText(0, 6, strAlarm_info);
		pRs->MoveNext();
	}
	
}



//合成登录请求数据包
CString CMTTestDlg::GetLogonXML()
{
	CString strXML;
	strXML = "<?xml version=\"1.0\" encoding=\"UTF-16\" ?>";
	strXML += "<IISPRSucMsg Version=\"1.0\">";
	strXML += "<LOGIN_ASK_INFO Msg_id=\"101\">";
    
	CString strSeq;
	strSeq.Format("000000%d", m_nSeq++);
	strSeq = strSeq.Right(6);
	strSeq = m_strUserID + strSeq;

	strXML += "<Msg_seq>" + strSeq + "</Msg_seq>"; 
    
	strXML += "<Service_id>101</Service_id>";
  
	
	strXML += "<User_id>" + m_strUserID + "</User_id>"; 
	strXML += "<User_pwd>" + m_strPWD + "</User_pwd>";   
  
	strXML += "</LOGIN_ASK_INFO>";
	strXML += "</IISPRSucMsg>";

	return strXML;
}

//合成心跳数据包
CString CMTTestDlg::GetBeatXML()
{
	CString strXML;
	strXML = "<?xml version=\"1.0\" encoding=\"UTF-16\" ?>";
	strXML += "<IISPRSucMsg Version=\"1.0\">";
	strXML += "<BEAT_ASK_INFO Msg_id=\"103\">";
    
	CString strSeq;
	strSeq.Format("000000%d", m_nSeq++);
	strSeq = strSeq.Right(6);
	strSeq = m_strUserID + strSeq;

	strXML += "<Msg_seq>" + strSeq + "</Msg_seq>"; 
    
	strXML += "<Service_id>103</Service_id>";
  
 
	strXML += "</BEAT_ASK_INFO>";
	strXML += "</IISPRSucMsg>";

	return strXML;
}


//合成数据同步请求数据包
CString CMTTestDlg::GetDataXML()
{
	CString strXML;
	strXML = "<?xml version=\"1.0\" encoding=\"UTF-16\" ?>";
	strXML += "<IISPRSucMsg Version=\"1.0\">";
	strXML += "<DATA_ASK_INFO Msg_id=\"201\">";
    
	CString strSeq;
	strSeq.Format("000000%d", m_nSeq++);
	strSeq = strSeq.Right(6);
	strSeq = m_strUserID + strSeq;

	strXML += "<Msg_seq>" + strSeq + "</Msg_seq>"; 
    
	strXML += "<Service_id>201</Service_id>";
  
 
	strXML += "</DATA_ASK_INFO>";
	strXML += "</IISPRSucMsg>";

	return strXML;
}


//合成点名指令数据包
CString CMTTestDlg::GetCallXML(CString strSID, CString strVTType)
{
	CString strXML;
	strXML = "<?xml version=\"1.0\" encoding=\"UTF-16\" ?>";
	strXML += "<IISPRSucMsg Version=\"1.0\">";
	strXML += "<CEN_CMD_INFO Msg_id=\"401\">";
    
	CString strSeq;
	strSeq.Format("000000%d", m_nSeq++);
	strSeq = strSeq.Right(6);
	strSeq = m_strUserID + strSeq;

	strXML += "<Msg_seq>" + strSeq + "</Msg_seq>"; 
    
	strXML += "<Service_id>4001</Service_id>";

	strXML += "<Suc_flag>1</Suc_flag>";
	strXML += "<Cmd_rep>1</Cmd_rep>";	

	strXML += "<SID>" + strSID + "</SID>"; 
    
//	strXML += "<Cmd_name>位置查询</Cmd_name>";
//	strXML += "<Cmd_param></Cmd_param>";

	strXML += "<VT_type>" + strVTType + "</VT_type>"; 
 
  
	strXML += "</CEN_CMD_INFO>";
	strXML += "</IISPRSucMsg>";



	return strXML;
}

//时钟处理函数
void CMTTestDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if(nIDEvent == 1)
	{
		if(m_bLogon == TRUE)
		{
			CString strXML;
			strXML = GetBeatXML();

			//每隔指定的时间自动发送心跳数据包
			m_LinkSocket.Send(strXML.LockBuffer(), strXML.GetLength());

		}
	}
	
	CDialog::OnTimer(nIDEvent);
}

//对返回的同步数据的处理
void CMTTestDlg::RecvSynDataReply(CString strRecv)
{
	if(strRecv == "")
	{
		return;
	}

	m_ctrlCarTree.DeleteAllItems();
	m_arrSID.RemoveAll();
	m_arrVTType.RemoveAll();

	int nPos;
	CString strVehicle;

	CString VEHICLE;
	VEHICLE = "VEHICLE";

	nPos = getXMLTagValue(strRecv, VEHICLE, strVehicle);

	while(nPos>0)
	{
		AddVehicle(strVehicle);
		strRecv = strRecv.Mid(nPos);
		nPos = getXMLTagValue(strRecv, VEHICLE, strVehicle);

	}
}


//向树控件中增加一条车辆信息
void CMTTestDlg::AddVehicle(CString strVehicle)
{
	if(strVehicle == "")
	{
		return;
	}

	CString strSID, strCar_num, strPh_num, strVT_type;
	
	getXMLTagValue(strVehicle, "SID", strSID);
	getXMLTagValue(strVehicle, "Car_num", strCar_num);
	getXMLTagValue(strVehicle, "Ph_num", strPh_num);
	getXMLTagValue(strVehicle, "VT_type", strVT_type);

	HTREEITEM th = m_ctrlCarTree.InsertItem(strSID);
	m_arrSID.Add(strSID);
	m_arrVTType.Add(strVT_type);
	m_ctrlCarTree.InsertItem(strCar_num, th);
	m_ctrlCarTree.InsertItem(strPh_num, th);
	m_ctrlCarTree.InsertItem(strVT_type, th);
	

	return;
}

//获得选中车辆的SID和VTType
BOOL CMTTestDlg::GetSelVehicle(CString &strSID, CString &strVTType)
{
	CString str;
	HTREEITEM th, thp;
	th = m_ctrlCarTree.GetSelectedItem();

	if(th == NULL)
	{
		return FALSE;
	}

	thp = m_ctrlCarTree.GetParentItem(th);
	if(thp != NULL)
	{
		th = thp;
	}

	strSID = m_ctrlCarTree.GetItemText(th);

	int nSize;
	nSize = m_arrSID.GetSize();
	for(int i=0; i<nSize; i++)
	{
		if(m_arrSID[i] == strSID)
		{
			strVTType = m_arrVTType[i];
			break;
		}
	}

	if(i >= nSize)
	{
		return FALSE;
	}


	return TRUE;
}

//对接收到的车辆位置信息的处理
void CMTTestDlg::RecvGpsData(CString strRecv)
{
    CString strSID, strGps_time, strGps_longitude, strGps_latitude;
	CString strGps_direction, strGps_speed, strAlarm_info, strMsg_seq;

	getXMLTagValue(strRecv, "SID", strSID);
	getXMLTagValue(strRecv, "Gps_time", strGps_time);
	getXMLTagValue(strRecv, "Gps_longitude", strGps_longitude);
	getXMLTagValue(strRecv, "Gps_latitude", strGps_latitude);
	getXMLTagValue(strRecv, "Gps_direction", strGps_direction);
	getXMLTagValue(strRecv, "Gps_speed", strGps_speed);
	getXMLTagValue(strRecv, "Alarm_info", strAlarm_info);
	getXMLTagValue(strRecv, "Msg_seq", strMsg_seq);

	//显示数据
	m_ctrlPosList.InsertItem(0, strSID);
	m_ctrlPosList.SetItemText(0, 1, strGps_longitude);
	m_ctrlPosList.SetItemText(0, 2, strGps_latitude);
	m_ctrlPosList.SetItemText(0, 3, strGps_speed);
	m_ctrlPosList.SetItemText(0, 4, strGps_direction);
	m_ctrlPosList.SetItemText(0, 5, strGps_time);
	m_ctrlPosList.SetItemText(0, 6, strAlarm_info);

    //保存数据
	_RecordsetPtr pRs("ADODB.Recordset");
	pRs->Open("SELECT * FROM history_gdata", _variant_t((IDispatch *)m_pConn,true), adOpenDynamic,
			adLockOptimistic, adCmdText);


	pRs->AddNew();
	pRs->Fields->Item["SID"]->Value = _bstr_t(strSID);

	pRs->Fields->Item["msg_seq"]->Value = _bstr_t(strMsg_seq);

	pRs->Fields->Item["gps_longitude"]->Value = atof(strGps_longitude);
	pRs->Fields->Item["gps_latitude"]->Value = atof(strGps_latitude);
	pRs->Fields->Item["gps_speed"]->Value = atof(strGps_speed);
	pRs->Fields->Item["gps_direction"]->Value = atof(strGps_direction);

	pRs->Fields->Item["gps_time"]->Value = _bstr_t(strGps_time);
	pRs->Fields->Item["alarm_info"]->Value = atol(strAlarm_info);
	
	
	pRs->Update();
	pRs->Close();
	

	return;
}

//清除位置列表中的内容
void CMTTestDlg::OnClear() 
{
	// TODO: Add your control notification handler code here
	m_ctrlPosList.DeleteAllItems();
}

⌨️ 快捷键说明

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