完成了实时数据的接收和组装字节流
This commit is contained in:
@@ -56,7 +56,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
std::cout << "cloud login: " << mac << " state: success!" << std::endl;
|
||||
//װ<>õ<EFBFBD>¼<EFBFBD>ɹ<EFBFBD>
|
||||
ClientManager::instance().set_cloud_status(id, 1); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>õ<EFBFBD>¼״̬Ϊ<CCAC>ѵ<EFBFBD>¼
|
||||
//ClientManager::instance().set_real_state_count("D002", 10);//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʱ
|
||||
ClientManager::instance().set_real_state_count("D002", 1,1);//<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵʱ
|
||||
}
|
||||
if (udata[19] == 0x00) {
|
||||
std::cout << "cloud login: " << mac << " state: fail!" << std::endl;
|
||||
@@ -80,6 +80,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
std::cerr << "Failed to get device state for: " << id << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
switch (currentState) {
|
||||
case DeviceState::IDLE:
|
||||
@@ -199,7 +200,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
1, //<2F><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>-1
|
||||
arr //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
);
|
||||
std::cout << js << std::endl;
|
||||
//std::cout << js << std::endl;
|
||||
|
||||
queue_data_t data;
|
||||
data.monitor_no = 1;
|
||||
@@ -278,6 +279,79 @@ void process_received_message(string mac, string id,const char* data, size_t len
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::READING_REALSTAT:
|
||||
//<2F><>ȡʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>״̬
|
||||
std::cout << "READING_REALSTAT state: Processing stats data from " << mac << std::endl;
|
||||
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_New_3S)) {
|
||||
unsigned char packet_type = udata[13];
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
const uint8_t* data_ptr = parser.RecvData.data() + 4;
|
||||
size_t data_size = parser.RecvData.size() - 4;
|
||||
ClientManager::instance().add_realtime_packet_to_device(
|
||||
id, packet_type, data_ptr, data_size
|
||||
);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
if (packet_type != 0x06) {
|
||||
unsigned char next_packet_type = packet_type + 1;
|
||||
auto sendbuff = generate_realstat_message(
|
||||
static_cast<unsigned char>(udata[12]),
|
||||
next_packet_type,
|
||||
static_cast<unsigned char>(0x01)
|
||||
);
|
||||
ClientManager::instance().change_device_state(
|
||||
id, DeviceState::READING_REALSTAT, sendbuff
|
||||
);
|
||||
}
|
||||
else {
|
||||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD>
|
||||
auto packets = ClientManager::instance().get_and_clear_realtime_packets(id);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>01-06<30><36>
|
||||
std::sort(packets.begin(), packets.end(),
|
||||
[](const ClientContext::RealtimePacket& a,
|
||||
const ClientContext::RealtimePacket& b) {
|
||||
return a.packet_type < b.packet_type;
|
||||
});
|
||||
|
||||
RealtagPqDate_float realdata;
|
||||
// <20><>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD>
|
||||
for (const auto& packet : packets) {
|
||||
switch (packet.packet_type) {
|
||||
case 0x01:
|
||||
realdata.ParsePacket1(packet.data.data(), packet.data.size());
|
||||
break;
|
||||
case 0x02:
|
||||
realdata.ParsePacket2(packet.data.data(), packet.data.size());
|
||||
break;
|
||||
case 0x03:
|
||||
realdata.ParsePacket3(packet.data.data(), packet.data.size());
|
||||
break;
|
||||
case 0x04:
|
||||
realdata.ParsePacket4(packet.data.data(), packet.data.size());
|
||||
break;
|
||||
case 0x05:
|
||||
realdata.ParsePacket5(packet.data.data(), packet.data.size());
|
||||
break;
|
||||
case 0x06:
|
||||
realdata.ParsePacket6(packet.data.data(), packet.data.size());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
std::string base64 = realdata.ConvertToBase64();
|
||||
std::cout << base64 << std::endl;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// װ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>쳣
|
||||
// <20><><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><F3A3ACB5><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EEB9A4><EFBFBD><EFBFBD>
|
||||
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
|
||||
}
|
||||
break;
|
||||
|
||||
case DeviceState::CUSTOM_ACTION:
|
||||
// <20>Զ<EFBFBD><D4B6>嶯<EFBFBD><E5B6AF>״̬
|
||||
std::cout << "CUSTOM_ACTION state: Processing custom response from " << mac << std::endl;
|
||||
|
||||
Reference in New Issue
Block a user