mirror of
https://github.com/paulscherrerinstitute/sf_daq_buffer.git
synced 2026-05-04 20:04:14 +02:00
Replace rapidjson with boost ptree
This commit is contained in:
@@ -14,13 +14,11 @@ requirements:
|
||||
- gcc
|
||||
- cppzmq
|
||||
- hdf5
|
||||
- rapidjson
|
||||
- boost
|
||||
|
||||
run:
|
||||
- cppzmq
|
||||
- hdf5
|
||||
- rapidjson
|
||||
- boost
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ namespace config {
|
||||
// Receiver config.
|
||||
int zmq_n_io_threads = 1;
|
||||
int zmq_receive_timeout = 100;
|
||||
int zmq_buffer_size_header = 1024 * 1024 * 0.2;
|
||||
int zmq_buffer_size_data = 1024 * 1024 * 10;
|
||||
|
||||
// Ring buffer config.
|
||||
size_t ring_buffer_n_slots = 100;
|
||||
|
||||
@@ -8,6 +8,8 @@ namespace config
|
||||
{
|
||||
extern int zmq_n_io_threads;
|
||||
extern int zmq_receive_timeout;
|
||||
extern int zmq_buffer_size_header;
|
||||
extern int zmq_buffer_size_data;
|
||||
|
||||
extern size_t ring_buffer_n_slots;
|
||||
extern uint32_t ring_buffer_read_retry_interval;
|
||||
|
||||
+24
-18
@@ -1,11 +1,11 @@
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <zmq.hpp>
|
||||
#include <cstdlib>
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
#include "rapidjson/document.h"
|
||||
#include <vector>
|
||||
#include <boost/property_tree/json_parser.hpp>
|
||||
|
||||
|
||||
#include "config.hpp"
|
||||
#include "WriterManager.hpp"
|
||||
@@ -14,7 +14,10 @@
|
||||
#include "rest_interface.hpp"
|
||||
#include "h5_utils.hpp"
|
||||
|
||||
|
||||
|
||||
using namespace std;
|
||||
namespace pt = boost::property_tree;
|
||||
|
||||
void write_h5(WriterManager *manager, RingBuffer *ring_buffer, string output_file)
|
||||
{
|
||||
@@ -60,35 +63,38 @@ void receive_zmq(WriterManager *manager, RingBuffer *ring_buffer, string connect
|
||||
receiver.setsockopt(ZMQ_RCVTIMEO, receive_timeout);
|
||||
receiver.connect(connect_address);
|
||||
|
||||
zmq::message_t message_data;
|
||||
zmq::message_t message_header(config::zmq_buffer_size_header);
|
||||
zmq::message_t message_data(config::zmq_buffer_size_data);
|
||||
|
||||
FrameMetadata frame_metadata;
|
||||
|
||||
rapidjson::Document header_parser;
|
||||
pt::ptree json_header;
|
||||
|
||||
while (manager->is_running()) {
|
||||
// Get the message header.
|
||||
if (!receiver.recv(&message_data)){
|
||||
if (!receiver.recv(&message_header)){
|
||||
continue;
|
||||
}
|
||||
|
||||
// Parse JSON header.
|
||||
char* header = static_cast<char*>(message_data.data());
|
||||
header_parser.Parse(header);
|
||||
string header_string(static_cast<char*>(message_header.data()), message_header.size());
|
||||
stringstream header_stream;
|
||||
header_stream << header_string << endl;
|
||||
pt::read_json(header_stream, json_header);
|
||||
|
||||
// Extract data from message header.
|
||||
frame_metadata.frame_index = header_parser["frame"].GetUint64();
|
||||
frame_metadata.frame_index = json_header.get<uint64_t>("frame");
|
||||
|
||||
auto header_shape = header_parser["shape"].GetArray();
|
||||
frame_metadata.frame_shape[0] = header_shape[0].GetUint64();
|
||||
frame_metadata.frame_shape[1] = header_shape[1].GetUint64();
|
||||
|
||||
if (header_parser.HasMember("endianness")) {
|
||||
if (string("big") == header_parser["endianness"].GetString()) {
|
||||
frame_metadata.endianness = "big";
|
||||
}
|
||||
uint8_t index = 0;
|
||||
for (auto item : json_header.get_child("shape")) {
|
||||
frame_metadata.frame_shape[index] = item.second.get_value<size_t>();
|
||||
index++;
|
||||
}
|
||||
|
||||
// Array 1.0 specified little endian as the default encoding.
|
||||
frame_metadata.endianness = json_header.get("endianness", "little");
|
||||
|
||||
frame_metadata.type = header_parser["type"].GetString();
|
||||
frame_metadata.type = json_header.get<string>("type");
|
||||
|
||||
// Get the message data.
|
||||
receiver.recv(&message_data);
|
||||
|
||||
Reference in New Issue
Block a user