修改了socket通讯框架,添加了统计数据时间获取,统计数据数据读取
This commit is contained in:
@@ -7,8 +7,22 @@
|
||||
#include <cctype>
|
||||
#include <cstdlib>
|
||||
#include "client2.h"
|
||||
#include "PQSMsg.h"
|
||||
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
float IntToFloat(int num) {
|
||||
return static_cast<float>(num) / 65536.0f;
|
||||
}
|
||||
|
||||
float ShorToFloat100(short num) {
|
||||
return static_cast<float>(num) / 100.0f;
|
||||
}
|
||||
|
||||
float ShorToFloat1000(short num) {
|
||||
return static_cast<float>(num) / 1000.0f;
|
||||
}
|
||||
|
||||
float ShorToFloat10000(short num) {
|
||||
return static_cast<float>(num) / 10000.0f;
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>䵽<EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void GetMAC(const std::string& strMAC, std::vector<unsigned char>& packet, size_t startIndex) {
|
||||
// <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD>пո<D0BF><D5B8>Ͷ̺<CDB6><CCBA><EFBFBD>
|
||||
@@ -50,6 +64,69 @@ void GetMAC(const std::string& strMAC, std::vector<unsigned char>& packet, size_
|
||||
}
|
||||
}
|
||||
|
||||
// CRC<52><43><EFBFBD>㺯<EFBFBD><E3BAAF>
|
||||
unsigned char GetCrcSum(const std::vector<unsigned char>& Check, int nOffset, int nLen) {
|
||||
unsigned char reg_b = 0x00;
|
||||
for (int i = 0; i < nLen; ++i) {
|
||||
if (static_cast<size_t>(i + nOffset) >= Check.size()) {
|
||||
throw std::out_of_range("Index out of range in GetCrcSum");
|
||||
}
|
||||
reg_b += Check[i + nOffset];
|
||||
}
|
||||
return reg_b;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD>
|
||||
std::vector<unsigned char> GetMsg(const std::vector<unsigned char>& SrcData, unsigned char nType) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (SrcData.empty() ||
|
||||
((nType < 0x01 || nType > 0xA4) && nType != 0xFF)) {
|
||||
return {};
|
||||
}
|
||||
|
||||
try {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ͷ(6) + <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>(2) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(1) + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> + CRC+<2B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(2)
|
||||
const size_t total_len = 6 + 2 + 1 + SrcData.size() + 2;
|
||||
std::vector<unsigned char> msg(total_len);
|
||||
|
||||
// <20><>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ͷ (6<>ֽ<EFBFBD>)
|
||||
msg[0] = 0xEB; // <20><><EFBFBD><EFBFBD>ͷ
|
||||
msg[1] = 0x90; // <20><><EFBFBD><EFBFBD>ͷ
|
||||
msg[2] = 0x00; // <20><><EFBFBD><EFBFBD>
|
||||
msg[3] = 0x00; // <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>ֶΣ<D6B6><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>峤<EFBFBD><E5B3A4>+<2B><><EFBFBD><EFBFBD><EFBFBD>룩
|
||||
uint16_t data_len = static_cast<uint16_t>(SrcData.size() + 1);
|
||||
msg[4] = static_cast<unsigned char>(data_len >> 8); // <20><><EFBFBD>ȸ<EFBFBD><C8B8>ֽ<EFBFBD>
|
||||
msg[5] = static_cast<unsigned char>(data_len & 0xFF); // <20><><EFBFBD>ȵ<EFBFBD><C8B5>ֽ<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD> (2<>ֽ<EFBFBD>)
|
||||
msg[6] = 0x00; // <20><><EFBFBD><EFBFBD>
|
||||
msg[7] = 0xFF; // <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
msg[8] = nType;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (!SrcData.empty()) {
|
||||
std::copy(SrcData.begin(), SrcData.end(), msg.begin() + 9);
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>CRC<52><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8<EFBFBD><38>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD><EFBFBD>壩
|
||||
unsigned char crc = GetCrcSum(msg, 8, 1 + SrcData.size());
|
||||
msg[msg.size() - 2] = crc;
|
||||
msg[msg.size() - 1] = 0x16; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
return msg;
|
||||
}
|
||||
catch (const std::exception& ex) {
|
||||
throw std::runtime_error(std::string("Exception in GetMsg: ") + ex.what());
|
||||
}
|
||||
catch (...) {
|
||||
throw std::runtime_error("Unknown exception in GetMsg");
|
||||
}
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>
|
||||
std::vector<unsigned char> generate_frontlogin_message(const std::string& strMac)
|
||||
{
|
||||
@@ -89,3 +166,42 @@ std::vector<unsigned char> generate_frontlogin_message(const std::string& strMac
|
||||
return packet;
|
||||
}
|
||||
|
||||
//ѯ<><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䱨<EFBFBD><E4B1A8>
|
||||
std::vector<unsigned char> generate_statequerytime_message() {
|
||||
// <20><><EFBFBD><EFBFBD>2<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0<CEAA><30>
|
||||
std::vector<unsigned char> DataBuf(2, 0x00);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>GetMsg<73><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_StatTime));
|
||||
}
|
||||
|
||||
//ѯ<><D1AF>ͳ<EFBFBD><CDB3><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
|
||||
std::vector<unsigned char> generate_statequerystat_message(tagTime time, uint16_t nDeviceNo, uint16_t nDataType) {
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD>С<EFBFBD><D0A1>3(<28><><EFBFBD><EFBFBD>) + 2(nDeviceNo) + 2(nDataType) + time<6D>ṹ<EFBFBD><E1B9B9>С
|
||||
const size_t totalSize = 3 + 2 * sizeof(uint16_t) + time.GetSize();
|
||||
std::vector<unsigned char> DataBuf(totalSize, 0x00); // <20><>ʼ<EFBFBD><CABC>Ϊȫ0
|
||||
|
||||
size_t offset = 0;
|
||||
|
||||
// 1. <20><><EFBFBD><EFBFBD>3<EFBFBD>ֽڱ<D6BD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѳ<EFBFBD>ʼ<EFBFBD><CABC>Ϊ0<CEAA><30>
|
||||
offset += 3;
|
||||
|
||||
// 2. д<><D0B4>nDeviceNo<4E><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t netDeviceNo = htons(nDeviceNo);
|
||||
memcpy(DataBuf.data() + offset, &netDeviceNo, sizeof(uint16_t));
|
||||
offset += sizeof(uint16_t);
|
||||
|
||||
// 3. д<><D0B4>nDataType<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uint16_t netDataType = htons(nDataType);
|
||||
memcpy(DataBuf.data() + offset, &netDataType, sizeof(uint16_t));
|
||||
offset += sizeof(uint16_t);
|
||||
|
||||
// 4. д<><D0B4>time<6D>ṹ<EFBFBD><E1B9B9><EFBFBD>ڲ<EFBFBD><DAB2>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
time.GetStructBuf(DataBuf.data(), DataBuf.size(), offset);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return GetMsg(DataBuf, static_cast<unsigned char>(MsgRequestType::Request_Stat));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user