PLCnext API Documentation  21.9.0.40
RscStream.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Rsc/Services/Rsc.h"
8 #include "Arp/System/Rsc/Services/RemotingReader.hpp"
9 #include "Arp/System/Rsc/Services/RemotingWriter.hpp"
10 #include "Arp/System/Commons/Io/Stream.hpp"
11 
12 namespace Arp { namespace System { namespace Rsc { namespace Services
13 {
14 
15 
19 class RscStream
20 {
21 public: // usings
23 
24 public: // construction/destruction
26  RscStream(void) = default;
27 
32  RscStream(RemotingWriter& writer);
33 
38  RscStream(RemotingReader& reader);
39 
41  RscStream(const RscStream& rscStream) = default;
42 
44  ~RscStream(void) = default;
45 
46 public: // setter/getter
51  void SetWriter(RemotingWriter* pValue);
52 
57  void SetReader(RemotingReader* pValue);
58 
59 public: // Read operations (only allowed with RemotingReader set)
63  void BeginRead(void);
64 
71  size_t Read(byte* pBuffer, size_t bufferSize);
72 
76  void Skip(void);
77 
81  void DeserializeTo(Stream& stream);
82 
83 public: // Write operations (only allowed if RemotingWriter is set)
87  void BeginWrite(void);
88 
94  void Write(const byte* pBuffer, size_t bufferCount);
95 
99  void Flush(void);
100 
104  void SerializeFrom(Stream& stream);
105 
106 private: // fields
107  RemotingWriter* pWriter = nullptr;
108  RemotingReader* pReader = nullptr;
109  bool initialized = false;
110  int count = 0;
111  int remaining = 0;
112 
113 private: // static fields
114  static constexpr int MaxPacketSize = std::numeric_limits<int>::max();
115  static constexpr size_t BufferSize = 4096;
116 };
117 
119 // inline methods of class RscStream
120 inline RscStream::RscStream(RemotingWriter& writer)
121  : pWriter(&writer)
122 {
123 }
124 
125 inline RscStream::RscStream(RemotingReader& reader)
126  : pReader(&reader)
127 {
128 }
129 
130 inline void RscStream::SetWriter(RemotingWriter * value)
131 {
132  this->pWriter = value;
133 }
134 
135 inline void RscStream::SetReader(RemotingReader* value)
136 {
137  this->pReader = value;
138 }
139 }}}} // end of namespace Arp::System::Rsc::Services
RscStream(void)=default
Constructs an instance of RscStream
void BeginWrite(void)
Begins the write operation
void SetReader(RemotingReader *pValue)
Sets RemotingReader needed to read stream data
Definition: RscStream.hpp:135
void SetWriter(RemotingWriter *pValue)
Sets RemotingWriter needed to write stream data
Definition: RscStream.hpp:130
void Flush(void)
Ends the read writer operation and writes remaining internal buffered bytes
~RscStream(void)=default
Destructs this instance and frees all resources.
void DeserializeTo(Stream &stream)
Deserialize the stream data and copies it to the as agument passed stream
void Write(const byte *pBuffer, size_t bufferCount)
Writes data into stream
Provides a generic view of a sequence of bytes.
Definition: Stream.hpp:19
void Skip(void)
Skips the entire stream and disposes the read data
size_t Read(byte *pBuffer, size_t bufferSize)
Reads up to bufferSize byte into memory referenced by pBuffer
Enables Rsc services to marshal large data packets as stream.
Definition: RscStream.hpp:19
Root namespace for the PLCnext API
void SerializeFrom(Stream &stream)
Serialize the stream data from the as agument passed stream
System components used by the System, Device, Plc or Io domains.
void BeginRead(void)
Begins the read operation. Need pReader to be set.
unsigned char byte
The Arp character type.
Definition: PrimitiveTypes.hpp:23