AWS IoT Device SDK C++ v2: crt/aws-crt-cpp/include/aws/crt/io/ChannelHandler.h Source File

AWS IoT Device SDK C++ v2 1.14.0 AWS IoT Device SDK C++ v2

ChannelHandler.h
Go to the documentation of this file.
1#pragma once
7#include <aws/crt/Exports.h>
8#include <aws/crt/Types.h>
9#include <aws/io/channel.h>
10
11#include <chrono>
12#include <cstddef>
13
14struct aws_array_list;
15struct aws_io_message;
16
17namespace Aws
18{
19 namespace Crt
20 {
21 namespace Io
22 {
23 enum class ChannelDirection
24 {
25 Read,
26 Write,
27 };
28
29 enum class MessageType
30 {
31 ApplicationData,
32 };
33
34 enum class TaskStatus
35 {
36 RunReady,
37 Canceled,
38 };
39
46 class AWS_CRT_CPP_API ChannelHandler
47 {
48 public:
49 virtual ~ChannelHandler() = default;
50
51 ChannelHandler(const ChannelHandler &) = delete;
52 ChannelHandler &operator=(const ChannelHandler &) = delete;
53
54 protected:
68 virtual int ProcessReadMessage(struct aws_io_message *message) = 0;
69
79 virtual int ProcessWriteMessage(struct aws_io_message *message) = 0;
80
89 virtual int IncrementReadWindow(size_t size) = 0;
90
103 virtual void ProcessShutdown(
104 ChannelDirection dir,
105 int errorCode,
106 bool freeScarceResourcesImmediately) = 0;
107
111 virtual size_t InitialWindowSize() = 0;
112
117 virtual size_t MessageOverhead() = 0;
118
122 virtual void ResetStatistics(){};
123
128 virtual void GatherStatistics(struct aws_array_list *) {}
129
130 public:
132 struct aws_channel_handler *SeatForCInterop(const std::shared_ptr<ChannelHandler> &selfRef);
133
137 bool ChannelsThreadIsCallersThread() const;
138
144 void ShutDownChannel(int errorCode);
145
150 void ScheduleTask(std::function<void(TaskStatus)> &&task);
151
157 void ScheduleTask(std::function<void(TaskStatus)> &&task, std::chrono::nanoseconds run_in);
158
159 protected:
160 ChannelHandler(Allocator *allocator = g_allocator);
161
165 struct aws_io_message *AcquireMessageFromPool(MessageType messageType, size_t sizeHint);
166
172 struct aws_io_message *AcquireMaxSizeMessageForWrite();
173
179 bool SendMessage(struct aws_io_message *message, ChannelDirection direction);
180
185 bool IncrementUpstreamReadWindow(size_t windowUpdateSize);
186
191 void OnShutdownComplete(ChannelDirection direction, int errorCode, bool freeScarceResourcesImmediately);
192
198 size_t DownstreamReadWindow() const;
199
204 size_t UpstreamMessageOverhead() const;
205
206 struct aws_channel_slot *GetSlot() const;
207
208 struct aws_channel_handler m_handler;
209 Allocator *m_allocator;
210
211 private:
212 std::shared_ptr<ChannelHandler> m_selfReference;
213 static struct aws_channel_handler_vtable s_vtable;
214
215 static void s_Destroy(struct aws_channel_handler *handler);
216 static int s_ProcessReadMessage(
217 struct aws_channel_handler *,
218 struct aws_channel_slot *,
219 struct aws_io_message *);
220 static int s_ProcessWriteMessage(
221 struct aws_channel_handler *,
222 struct aws_channel_slot *,
223 struct aws_io_message *);
224 static int s_IncrementReadWindow(struct aws_channel_handler *, struct aws_channel_slot *, size_t size);
225 static int s_ProcessShutdown(
226 struct aws_channel_handler *,
227 struct aws_channel_slot *,
228 enum aws_channel_direction,
229 int errorCode,
230 bool freeScarceResourcesImmediately);
231 static size_t s_InitialWindowSize(struct aws_channel_handler *);
232 static size_t s_MessageOverhead(struct aws_channel_handler *);
233 static void s_ResetStatistics(struct aws_channel_handler *);
234 static void s_GatherStatistics(struct aws_channel_handler *, struct aws_array_list *statsList);
235 };
236 } // namespace Io
237 } // namespace Crt
238} // namespace Aws
Types.h
Aws::Crt::Io::ChannelHandler
Definition: ChannelHandler.h:47
Aws::Crt::Io::ChannelHandler::ProcessShutdown
virtual void ProcessShutdown(ChannelDirection dir, int errorCode, bool freeScarceResourcesImmediately)=0
Aws::Crt::Io::ChannelHandler::ProcessWriteMessage
virtual int ProcessWriteMessage(struct aws_io_message *message)=0
Aws::Crt::Io::ChannelHandler::MessageOverhead
virtual size_t MessageOverhead()=0
Aws::Crt::Io::ChannelHandler::GatherStatistics
virtual void GatherStatistics(struct aws_array_list *)
Definition: ChannelHandler.h:128
Aws::Crt::Io::ChannelHandler::ChannelHandler
ChannelHandler(const ChannelHandler &)=delete
Aws::Crt::Io::ChannelHandler::ProcessReadMessage
virtual int ProcessReadMessage(struct aws_io_message *message)=0
Aws::Crt::Io::ChannelHandler::ResetStatistics
virtual void ResetStatistics()
Definition: ChannelHandler.h:122
Aws::Crt::Io::ChannelHandler::m_allocator
Allocator * m_allocator
Definition: ChannelHandler.h:209
Aws::Crt::Io::ChannelHandler::IncrementReadWindow
virtual int IncrementReadWindow(size_t size)=0
Aws::Crt::Io::ChannelHandler::~ChannelHandler
virtual ~ChannelHandler()=default
Aws::Crt::Io::ChannelHandler::operator=
ChannelHandler & operator=(const ChannelHandler &)=delete
Aws::Crt::Io::ChannelHandler::InitialWindowSize
virtual size_t InitialWindowSize()=0
Exports.h
AWS_CRT_CPP_API
#define AWS_CRT_CPP_API
Definition: Exports.h:37
Aws::Crt::Io::ChannelDirection
ChannelDirection
Definition: ChannelHandler.h:24
Aws::Crt::Io::ChannelDirection::Write
@ Write
Aws::Crt::Io::ChannelDirection::Read
@ Read
Aws::Crt::Io::MessageType
MessageType
Definition: ChannelHandler.h:30
Aws::Crt::Io::MessageType::ApplicationData
@ ApplicationData
Aws::Crt::Io::TaskStatus
TaskStatus
Definition: ChannelHandler.h:35
Aws::Crt::Io::TaskStatus::Canceled
@ Canceled
Aws::Crt::Io::TaskStatus::RunReady
@ RunReady
Aws::Crt::Allocator
aws_allocator Allocator
Definition: StlAllocator.h:17
Aws::Crt::g_allocator
AWS_CRT_CPP_API Allocator * g_allocator
Definition: Api.cpp:21
Aws
Definition: Api.h:17