PLCnext API Documentation  21.0.0.35466
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 
11 namespace Arp { namespace System { namespace Rsc { namespace Services
12 {
13 
17 class RscStream
18 {
19 public: // construction/destruction
21  RscStream(void) = default;
22 
27  RscStream(RemotingWriter& writer);
28 
33  RscStream(RemotingReader& reader);
34 
36  RscStream(const RscStream& rscStream) = default;
37 
39  ~RscStream(void) = default;
40 
41 public: // setter/getter
46  void SetWriter(RemotingWriter* pValue);
47 
52  void SetReader(RemotingReader* pValue);
53 
54 public: // Read operations (only allowed with RemotingReader set)
58  void BeginRead(void);
59 
66  size_t Read(byte* pBuffer, size_t bufferSize);
67 
71  void Skip(void);
72 
73 public: // Write operations (only allowed if RemotingWriter is set)
77  void BeginWrite(void);
78 
84  void Write(const byte* pBuffer, size_t bufferSize);
85 
89  void Flush(void);
90 
91 private: // fields
92  RemotingWriter* pWriter = nullptr;
93  RemotingReader* pReader = nullptr;
94  bool initialized = false;
95  int count = 0;
96  int remaining = 0;
97 
98 private: // static fields
99  static constexpr int MaxPacketSize = std::numeric_limits<int>::max();
100 };
101 
103 // inline methods of class RscStream
104 inline RscStream::RscStream(RemotingWriter& writer)
105  : pWriter(&writer)
106 {
107 }
108 
109 inline RscStream::RscStream(RemotingReader& reader)
110  : pReader(&reader)
111 {
112 }
113 
114 inline void RscStream::SetWriter(RemotingWriter * value)
115 {
116  this->pWriter = value;
117 }
118 
119 inline void RscStream::SetReader(RemotingReader* value)
120 {
121  this->pReader = value;
122 }
123 }}}} // 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:119
void SetWriter(RemotingWriter *pValue)
Sets RemotingWriter needed to write stream data
Definition: RscStream.hpp:114
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 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:17
Root namespace for the PLCnext API
System components used by the System, Device, Plc or Io domains.
void BeginRead(void)
Begins the read operation. Need pReader to be set.
void Write(const byte *pBuffer, size_t bufferSize)
Writes data into stream
unsigned char byte
The Arp character type.
Definition: PrimitiveTypes.hpp:23