AWS SDK for C++
AWS SDK for C++
Loading...
Searching...
No Matches
EventStreamHandler.h
Go to the documentation of this file.
1
6#pragma once
7
16#include <cassert>
17
18namespace Aws
19{
20 namespace Utils
21 {
22 namespace Event
23 {
29 {
30 public:
32 m_failure(false), m_internalError(EventStreamErrors::EVENT_STREAM_NO_ERROR), m_headersBytesReceived(0), m_payloadBytesReceived(0), m_message()
33 {}
34
35 virtual ~EventStreamHandler() = default;
36
40 inline operator bool() const { return !m_failure; }
41
45 inline void SetFailure() { m_failure = true; }
46
50 inline virtual void Reset()
51 {
52 m_failure = false;
53 m_internalError = EventStreamErrors::EVENT_STREAM_NO_ERROR;
54 m_headersBytesReceived = 0;
55 m_payloadBytesReceived = 0;
56
57 m_message.Reset();
58 }
59
63 inline void SetInternalError(int errorCode = 0)
64 {
65 m_internalError = static_cast<EventStreamErrors>(errorCode);
66 }
67
72 {
73 return m_internalError;
74 }
75
82 inline virtual bool IsMessageCompleted()
83 {
84 return m_message.GetHeadersLength() == m_headersBytesReceived && m_message.GetPayloadLength() == m_payloadBytesReceived;
85 }
86
90 inline virtual void SetMessageMetadata(size_t totalLength, size_t headersLength, size_t payloadLength)
91 {
92 m_message.SetTotalLength(totalLength);
93 m_message.SetHeadersLength(headersLength);
94 m_message.SetPayloadLength(payloadLength);
95 assert(totalLength == 12/*prelude length*/ + headersLength + payloadLength + 4/*message crc length*/);
96 if (totalLength != headersLength + payloadLength + 16)
97 {
98 AWS_LOG_WARN("EventStreamHandler", "Message total length mismatch.");
99 }
100 }
101
105 inline virtual void WriteMessageEventPayload(const unsigned char* data, size_t dataLength)
106 {
107 m_message.WriteEventPayload(data, dataLength);
108 m_payloadBytesReceived += dataLength;
109 }
110
114 inline virtual Aws::Vector<unsigned char>&& GetEventPayloadWithOwnership() { return m_message.GetEventPayloadWithOwnership(); }
115
119 inline virtual Aws::String GetEventPayloadAsString() { return m_message.GetEventPayloadAsString(); }
120
124 inline virtual void InsertMessageEventHeader(const String& eventHeaderName, size_t eventHeaderLength, const Aws::Utils::Event::EventHeaderValue& eventHeaderValue)
125 {
126 m_message.InsertEventHeader(eventHeaderName, eventHeaderValue);
127 m_headersBytesReceived += eventHeaderLength;
128 }
129
130 inline virtual const Aws::Utils::Event::EventHeaderValueCollection& GetEventHeaders() { return m_message.GetEventHeaders(); }
131
136 virtual void OnEvent() = 0;
137
138 private:
139 bool m_failure;
140 EventStreamErrors m_internalError;
141 size_t m_headersBytesReceived;
142 size_t m_payloadBytesReceived;
144 };
145 }
146 }
147}
#define AWS_CORE_API
Definition: Core_EXPORTS.h:26
#define AWS_LOG_WARN(tag,...)
Definition: LogMacros.h:79
virtual void SetMessageMetadata(size_t totalLength, size_t headersLength, size_t payloadLength)
virtual Aws::Vector< unsigned char > && GetEventPayloadWithOwnership()
virtual void InsertMessageEventHeader(const String &eventHeaderName, size_t eventHeaderLength, const Aws::Utils::Event::EventHeaderValue &eventHeaderValue)
virtual void WriteMessageEventPayload(const unsigned char *data, size_t dataLength)
virtual const Aws::Utils::Event::EventHeaderValueCollection & GetEventHeaders()
Aws::Map< Aws::String, EventHeaderValue > EventHeaderValueCollection
Definition: EventHeader.h:317
std::basic_string< char, std::char_traits< char >, Aws::Allocator< char > > String
Definition: AWSString.h:97
std::vector< T, Aws::Allocator< T > > Vector
Definition: AWSVector.h:17