pf_writer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "pf_driver/pf/writer.h"
6 
7 template <typename T>
8 class PFWriter : public Writer<T>
9 {
10 public:
11  PFWriter(std::unique_ptr<Transport>&& transport, std::shared_ptr<Parser<T>> parser)
12  : transport_(std::move(transport)), parser_(parser), is_running_(false)
13  {
14  }
15 
16  virtual bool start()
17  {
18  std::unique_lock<std::mutex> lck(mtx_);
19  is_running_ = true;
20  if (transport_)
21  {
22  if (transport_->is_connected())
23  return true;
24 
25  return transport_->connect();
26  }
27  return false;
28  }
29 
30  virtual bool stop()
31  {
32  std::unique_lock<std::mutex> lck(mtx_);
33  is_running_ = false;
34  if (transport_ && transport_->is_connected())
35  {
36  return transport_->disconnect();
37  }
38  return false;
39  }
40 
41  virtual bool get(std::vector<std::unique_ptr<T>>& packets)
42  {
43  std::unique_lock<std::mutex> lck(mtx_);
44  if (!is_running_)
45  {
46  return false;
47  }
48  boost::array<uint8_t, 4096> buf;
49  size_t read = 0;
50  size_t used = 0;
51  if (transport_->readWithTimeout(buf, read, 2))
52  {
53  persistent_buffer_.insert(persistent_buffer_.end(), buf.begin(), buf.begin() + read);
54  parser_->parse(persistent_buffer_.data(), persistent_buffer_.size(), packets, used);
55 
56  if (used)
57  {
58  if (used == persistent_buffer_.size())
59  persistent_buffer_.clear();
60  else
61  persistent_buffer_.erase(persistent_buffer_.begin(), persistent_buffer_.begin() + used);
62  }
63  return true;
64  }
65  return false;
66  }
67 
68 private:
69  std::unique_ptr<Transport> transport_;
70  std::shared_ptr<Parser<T>> parser_;
71  std::vector<uint8_t> persistent_buffer_;
73  std::mutex mtx_;
74 };
PFWriter::parser_
std::shared_ptr< Parser< T > > parser_
Definition: pf_writer.h:70
PFWriter::is_running_
bool is_running_
Definition: pf_writer.h:72
PFWriter
Definition: pf_writer.h:8
PFWriter::stop
virtual bool stop()
Definition: pf_writer.h:30
PFWriter::persistent_buffer_
std::vector< uint8_t > persistent_buffer_
Definition: pf_writer.h:71
PFWriter::mtx_
std::mutex mtx_
Definition: pf_writer.h:73
PFWriter::PFWriter
PFWriter(std::unique_ptr< Transport > &&transport, std::shared_ptr< Parser< T >> parser)
Definition: pf_writer.h:11
Parser
Definition: parser.h:4
pf_parser.h
PFWriter::get
virtual bool get(std::vector< std::unique_ptr< T >> &packets)
Definition: pf_writer.h:41
std
transport.h
PFWriter::start
virtual bool start()
Definition: pf_writer.h:16
Writer
Definition: writer.h:7
PFWriter::transport_
std::unique_ptr< Transport > transport_
Definition: pf_writer.h:69
writer.h
move
void move(std::vector< T > &a, std::vector< T > &b)


pf_driver
Author(s): Harsh Deshpande
autogenerated on Sun Feb 4 2024 03:32:56