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 };
std::unique_ptr< Transport > transport_
Definition: pf_writer.h:69
Definition: writer.h:7
std::vector< uint8_t > persistent_buffer_
Definition: pf_writer.h:71
PFWriter(std::unique_ptr< Transport > &&transport, std::shared_ptr< Parser< T >> parser)
Definition: pf_writer.h:11
virtual bool stop()
Definition: pf_writer.h:30
bool is_running_
Definition: pf_writer.h:72
virtual bool start()
Definition: pf_writer.h:16
std::mutex mtx_
Definition: pf_writer.h:73
void move(std::vector< T > &a, std::vector< T > &b)
parser
std::shared_ptr< Parser< T > > parser_
Definition: pf_writer.h:70
Definition: parser.h:4


pf_driver
Author(s): Harsh Deshpande
autogenerated on Fri Feb 24 2023 03:59:35