AWS IoT Device SDK C++ v2  1.36.0
AWS IoT Device SDK C++ v2
EventStreamClient.h
Go to the documentation of this file.
1 #pragma once
2 
8 
9 #include <aws/crt/DateTime.h>
10 #include <aws/crt/JsonObject.h>
11 #include <aws/crt/StlAllocator.h>
12 #include <aws/crt/Types.h>
13 #include <aws/crt/UUID.h>
16 #include <aws/crt/io/TlsOptions.h>
17 
19 
20 #include <aws/event-stream/event_stream_rpc_client.h>
21 #include <aws/io/host_resolver.h>
22 
23 #include <atomic>
24 #include <functional>
25 #include <future>
26 #include <memory>
27 
28 namespace Aws
29 {
30  namespace Crt
31  {
32  namespace Io
33  {
34  class ClientBootstrap;
35  }
36  } // namespace Crt
37  namespace Eventstreamrpc
38  {
39  class EventStreamHeader;
40  class MessageAmendment;
41  class ClientOperation;
42  class ClientConnection;
43  class ClientContinuation;
44 
45  using HeaderValueType = aws_event_stream_header_value_type;
46  using MessageType = aws_event_stream_rpc_message_type;
47 
52  using OnMessageFlushCallback = std::function<void(int errorCode)>;
53 
59  using ConnectMessageAmender = std::function<const MessageAmendment &(void)>;
60 
65  {
66  public:
67  EventStreamHeader(const EventStreamHeader &lhs) noexcept;
68  EventStreamHeader(EventStreamHeader &&rhs) noexcept;
69  EventStreamHeader &operator=(const EventStreamHeader &lhs) noexcept;
70  ~EventStreamHeader() noexcept;
72  const struct aws_event_stream_header_value_pair &header,
73  Crt::Allocator *allocator = Crt::g_allocator);
75  const Crt::String &name,
76  const Crt::String &value,
77  Crt::Allocator *allocator = Crt::g_allocator) noexcept;
78 
79  Crt::String GetHeaderName() const noexcept;
80 
81  bool GetValueAsString(Crt::String &) const noexcept;
82 
83  const struct aws_event_stream_header_value_pair *GetUnderlyingHandle() const;
84 
85  bool operator==(const EventStreamHeader &other) const noexcept;
86 
87  private:
88  Crt::Allocator *m_allocator;
89  Crt::ByteBuf m_valueByteBuf;
90  struct aws_event_stream_header_value_pair m_underlyingHandle;
91  };
92 
99  {
100  public:
103  MessageAmendment &operator=(const MessageAmendment &lhs);
104  MessageAmendment &operator=(MessageAmendment &&rhs);
105  ~MessageAmendment() noexcept;
106  explicit MessageAmendment(Crt::Allocator *allocator = Crt::g_allocator) noexcept;
108  const Crt::List<EventStreamHeader> &headers,
110  Crt::Allocator *allocator) noexcept;
112  const Crt::List<EventStreamHeader> &headers,
113  Crt::Allocator *allocator = Crt::g_allocator) noexcept;
116  Crt::Allocator *allocator = Crt::g_allocator) noexcept;
117  MessageAmendment(const Crt::ByteBuf &payload, Crt::Allocator *allocator = Crt::g_allocator) noexcept;
118 
122  void AddHeader(EventStreamHeader &&header) noexcept;
123 
127  void PrependHeaders(Crt::List<EventStreamHeader> &&headers);
128  void SetPayload(const Crt::Optional<Crt::ByteBuf> &payload) noexcept;
129  void SetPayload(Crt::Optional<Crt::ByteBuf> &&payload);
130  const Crt::List<EventStreamHeader> &GetHeaders() const & noexcept;
131  Crt::List<EventStreamHeader> &&GetHeaders() &&;
132  const Crt::Optional<Crt::ByteBuf> &GetPayload() const & noexcept;
133  Crt::Optional<Crt::ByteBuf> &&GetPayload() &&;
134 
135  private:
137  Crt::Optional<Crt::ByteBuf> m_payload;
138  Crt::Allocator *m_allocator;
139  };
140 
145  {
146  public:
147  ConnectionConfig() noexcept : m_clientBootstrap(nullptr), m_connectRequestCallback(nullptr) {}
148  Crt::Optional<Crt::String> GetHostName() const noexcept { return m_hostName; }
149  Crt::Optional<uint32_t> GetPort() const noexcept { return m_port; }
150  Crt::Optional<Crt::Io::SocketOptions> GetSocketOptions() const noexcept { return m_socketOptions; }
151  Crt::Optional<MessageAmendment> GetConnectAmendment() const noexcept { return m_connectAmendment; }
153  {
154  return m_tlsConnectionOptions;
155  }
156  Crt::Io::ClientBootstrap *GetClientBootstrap() const noexcept { return m_clientBootstrap; }
157  OnMessageFlushCallback GetConnectRequestCallback() const noexcept { return m_connectRequestCallback; }
159  {
160  return [&](void) -> const MessageAmendment & { return m_connectAmendment; };
161  }
162 
163  void SetHostName(Crt::String hostName) noexcept { m_hostName = hostName; }
164  void SetPort(uint32_t port) noexcept { m_port = port; }
165  void SetSocketOptions(const Crt::Io::SocketOptions &socketOptions) noexcept
166  {
167  m_socketOptions = socketOptions;
168  }
169  void SetConnectAmendment(const MessageAmendment &connectAmendment) noexcept
170  {
171  m_connectAmendment = connectAmendment;
172  }
173  void SetTlsConnectionOptions(Crt::Io::TlsConnectionOptions tlsConnectionOptions) noexcept
174  {
175  m_tlsConnectionOptions = tlsConnectionOptions;
176  }
177  void SetClientBootstrap(Crt::Io::ClientBootstrap *clientBootstrap) noexcept
178  {
179  m_clientBootstrap = clientBootstrap;
180  }
181  void SetConnectRequestCallback(OnMessageFlushCallback connectRequestCallback) noexcept
182  {
183  m_connectRequestCallback = connectRequestCallback;
184  }
185 
186  protected:
194  };
195 
197  {
211  };
212 
214  {
216  int crtError;
217  operator bool() const noexcept { return baseStatus == EVENT_STREAM_RPC_SUCCESS; }
218  Crt::String StatusToString();
219  };
220 
225  {
226  public:
227  virtual ~ConnectionLifecycleHandler() noexcept = default;
228 
234  virtual void OnConnectCallback();
240  virtual void OnDisconnectCallback(RpcError status);
248  virtual bool OnErrorCallback(RpcError status);
253  virtual void OnPingCallback(
254  const Crt::List<EventStreamHeader> &headers,
255  const Crt::Optional<Crt::ByteBuf> &payload);
256  };
257 
262  {
263  public:
265  ClientContinuation *clientContinuation,
266  Crt::Allocator *allocator = Crt::g_allocator) noexcept
267  : clientContinuation(clientContinuation), allocator(allocator)
268  {
269  continuationDestroyed = false;
270  }
271  ContinuationCallbackData(const ContinuationCallbackData &lhs) noexcept = delete;
273  std::mutex callbackMutex;
276  };
277 
282  {
283  public:
287  virtual void OnContinuationMessage(
288  const Crt::List<EventStreamHeader> &headers,
289  const Crt::Optional<Crt::ByteBuf> &payload,
290  MessageType messageType,
291  uint32_t messageFlags) = 0;
299  virtual void OnContinuationClosed() = 0;
300  virtual ~ClientContinuationHandler() noexcept = default;
301 
302  private:
303  friend class ClientContinuation;
304  ContinuationCallbackData *m_callbackData;
305  };
306 
311  {
312  public:
323  ClientConnection *connection,
324  ClientContinuationHandler &continuationHandler,
325  Crt::Allocator *allocator) noexcept;
326  ~ClientContinuation() noexcept;
327 
339  std::future<RpcError> Activate(
340  const Crt::String &operation,
341  const Crt::List<EventStreamHeader> &headers,
342  const Crt::Optional<Crt::ByteBuf> &payload,
343  MessageType messageType,
344  uint32_t messageFlags,
345  OnMessageFlushCallback onMessageFlushCallback) noexcept;
346 
351  bool IsClosed() noexcept;
352 
363  std::future<RpcError> SendMessage(
364  const Crt::List<EventStreamHeader> &headers,
365  const Crt::Optional<Crt::ByteBuf> &payload,
366  MessageType messageType,
367  uint32_t messageFlags,
368  OnMessageFlushCallback onMessageFlushCallback) noexcept;
369 
370  private:
371  friend class ClientOperation;
372  Crt::Allocator *m_allocator;
373  ClientContinuationHandler &m_continuationHandler;
374  struct aws_event_stream_rpc_client_continuation_token *m_continuationToken;
375  ContinuationCallbackData *m_callbackData;
376 
377  static void s_onContinuationMessage(
378  struct aws_event_stream_rpc_client_continuation_token *continuationToken,
379  const struct aws_event_stream_rpc_message_args *messageArgs,
380  void *userData) noexcept;
381  static void s_onContinuationClosed(
382  struct aws_event_stream_rpc_client_continuation_token *continuationToken,
383  void *userData) noexcept;
384  };
385 
390  {
391  public:
392  AbstractShapeBase() noexcept;
393  virtual ~AbstractShapeBase() noexcept = default;
394  static void s_customDeleter(AbstractShapeBase *shape) noexcept;
395  virtual void SerializeToJsonObject(Crt::JsonObject &payloadObject) const = 0;
396  virtual Crt::String GetModelName() const noexcept = 0;
397 
398  protected:
399  Crt::Allocator *m_allocator;
400  };
401 
406  {
407  public:
408  explicit OperationError() noexcept = default;
409  static void s_customDeleter(OperationError *shape) noexcept;
410  virtual void SerializeToJsonObject(Crt::JsonObject &payloadObject) const override;
411  virtual Crt::Optional<Crt::String> GetMessage() noexcept = 0;
412  };
413 
420  {
421  public:
422  virtual ~StreamResponseHandler() noexcept = default;
423 
427  virtual void OnStreamClosed();
428 
429  protected:
430  friend class ClientOperation;
434  virtual void OnStreamEvent(Crt::ScopedResource<AbstractShapeBase> response);
440  virtual bool OnStreamError(Crt::ScopedResource<OperationError> operationError, RpcError rpcError);
441  };
442 
444  {
447  RPC_ERROR
448  };
449 
454  {
455  public:
456  TaggedResult() noexcept;
457  explicit TaggedResult(Crt::ScopedResource<AbstractShapeBase> response) noexcept;
458  explicit TaggedResult(Crt::ScopedResource<OperationError> error) noexcept;
459  explicit TaggedResult(RpcError rpcError) noexcept;
460  TaggedResult(TaggedResult &&rhs) noexcept;
461  TaggedResult &operator=(TaggedResult &&rhs) noexcept;
462  ~TaggedResult() noexcept;
467  operator bool() const noexcept;
468 
473  AbstractShapeBase *GetOperationResponse() const noexcept;
474 
479  OperationError *GetOperationError() const noexcept;
480 
485  RpcError GetRpcError() const noexcept;
486 
491  ResultType GetResultType() const noexcept { return m_responseType; }
492 
493  private:
494  union AWS_EVENTSTREAMRPC_API OperationResult
495  {
496  OperationResult(Crt::ScopedResource<AbstractShapeBase> &&response) noexcept
497  : m_response(std::move(response))
498  {
499  }
500  OperationResult(Crt::ScopedResource<OperationError> &&error) noexcept : m_error(std::move(error)) {}
501  OperationResult() noexcept : m_response(nullptr) {}
502  ~OperationResult() noexcept {};
503  Crt::ScopedResource<AbstractShapeBase> m_response;
504  Crt::ScopedResource<OperationError> m_error;
505  };
506  ResultType m_responseType;
507  OperationResult m_operationResult;
508  RpcError m_rpcError;
509  };
510 
511  using ExpectedResponseFactory = std::function<
513  using ErrorResponseFactory = std::function<
515 
516  using LoneResponseRetriever = std::function<ExpectedResponseFactory(const Crt::String &modelName)>;
517  using StreamingResponseRetriever = std::function<ExpectedResponseFactory(const Crt::String &modelName)>;
518  using ErrorResponseRetriever = std::function<ErrorResponseFactory(const Crt::String &modelName)>;
519 
521  {
522  /* An interface shared by all operations for retrieving the response object given the model name. */
523  public:
524  virtual ~ResponseRetriever() noexcept = default;
525  virtual ExpectedResponseFactory GetInitialResponseFromModelName(
526  const Crt::String &modelName) const noexcept = 0;
527  virtual ExpectedResponseFactory GetStreamingResponseFromModelName(
528  const Crt::String &modelName) const noexcept = 0;
529  virtual ErrorResponseFactory GetOperationErrorFromModelName(
530  const Crt::String &modelName) const noexcept = 0;
531  };
532 
534  {
535  public:
536  virtual ~ServiceModel() noexcept = default;
537  virtual Crt::ScopedResource<OperationError> AllocateOperationErrorFromPayload(
538  const Crt::String &errorModelName,
539  Crt::StringView stringView,
540  Crt::Allocator *allocator) const noexcept = 0;
541  };
542 
547  {
548  public:
549  OperationModelContext(const ServiceModel &serviceModel) noexcept;
550 
551  virtual ~OperationModelContext() noexcept = default;
552 
559  virtual Crt::ScopedResource<AbstractShapeBase> AllocateInitialResponseFromPayload(
560  Crt::StringView stringView,
561  Crt::Allocator *allocator) const noexcept = 0;
562 
569  virtual Crt::ScopedResource<AbstractShapeBase> AllocateStreamingResponseFromPayload(
570  Crt::StringView stringView,
571  Crt::Allocator *allocator) const noexcept = 0;
572 
577  virtual Crt::String GetInitialResponseModelName() const noexcept = 0;
578 
583  virtual Crt::String GetRequestModelName() const noexcept = 0;
584 
589  virtual Crt::Optional<Crt::String> GetStreamingResponseModelName() const noexcept = 0;
590 
597  virtual Crt::String GetOperationName() const noexcept = 0;
598 
606  Crt::ScopedResource<OperationError> AllocateOperationErrorFromPayload(
607  const Crt::String &errorModelName,
608  Crt::StringView stringView,
609  Crt::Allocator *allocator) const noexcept
610  {
611  return m_serviceModel.AllocateOperationErrorFromPayload(errorModelName, stringView, allocator);
612  }
613 
614  private:
615  const ServiceModel &m_serviceModel;
616  };
617 
622  {
623  public:
625  ClientConnection &connection,
626  std::shared_ptr<StreamResponseHandler> streamHandler,
627  const OperationModelContext &operationModelContext,
628  Crt::Allocator *allocator) noexcept;
629  ~ClientOperation() noexcept;
630 
631  ClientOperation(const ClientOperation &clientOperation) noexcept = delete;
632  ClientOperation(ClientOperation &&clientOperation) noexcept = delete;
633  bool operator=(const ClientOperation &clientOperation) noexcept = delete;
634  bool operator=(ClientOperation &&clientOperation) noexcept = delete;
635 
643  std::future<RpcError> Close(OnMessageFlushCallback onMessageFlushCallback = nullptr) noexcept;
644 
649  std::future<TaggedResult> GetOperationResult() noexcept;
650 
655  void WithLaunchMode(std::launch mode) noexcept;
656 
657  protected:
664  std::future<RpcError> Activate(
665  const AbstractShapeBase *shape,
666  OnMessageFlushCallback onMessageFlushCallback) noexcept;
667 
673  virtual Crt::String GetModelName() const noexcept = 0;
674 
675  const OperationModelContext &m_operationModelContext;
676  std::launch m_asyncLaunchMode;
677 
678  private:
679  EventStreamRpcStatusCode HandleData(const Crt::Optional<Crt::ByteBuf> &payload);
680  EventStreamRpcStatusCode HandleError(
681  const Crt::String &modelName,
682  const Crt::Optional<Crt::ByteBuf> &payload,
683  uint32_t messageFlags);
687  void OnContinuationMessage(
688  const Crt::List<EventStreamHeader> &headers,
689  const Crt::Optional<Crt::ByteBuf> &payload,
690  MessageType messageType,
691  uint32_t messageFlags) override;
699  void OnContinuationClosed() override;
700 
701  const EventStreamHeader *GetHeaderByName(
702  const Crt::List<EventStreamHeader> &headers,
703  const Crt::String &name) noexcept;
704 
705  enum CloseState
706  {
707  WONT_CLOSE = 0,
708  WILL_CLOSE,
709  ALREADY_CLOSED
710  };
711 
712  uint32_t m_messageCount;
713  Crt::Allocator *m_allocator;
714  std::shared_ptr<StreamResponseHandler> m_streamHandler;
715  ClientContinuation m_clientContinuation;
716  /* This mutex protects m_resultReceived & m_closeState. */
717  std::mutex m_continuationMutex;
718  bool m_resultReceived;
719  std::promise<TaggedResult> m_initialResponsePromise;
720  std::atomic_int m_expectedCloses;
721  std::atomic_bool m_streamClosedCalled;
722  std::condition_variable m_closeReady;
723  };
724 
729  {
730  public:
731  ClientConnection(Crt::Allocator *allocator = Crt::g_allocator) noexcept;
732  ~ClientConnection() noexcept;
733  ClientConnection(const ClientConnection &) noexcept = delete;
734  ClientConnection &operator=(const ClientConnection &) noexcept = delete;
735  ClientConnection(ClientConnection &&) noexcept;
736  ClientConnection &operator=(ClientConnection &&) noexcept;
737 
745  std::future<RpcError> Connect(
746  const ConnectionConfig &connectionOptions,
747  ConnectionLifecycleHandler *connectionLifecycleHandler,
748  Crt::Io::ClientBootstrap &clientBootstrap) noexcept;
749 
750  std::future<RpcError> SendPing(
751  const Crt::List<EventStreamHeader> &headers,
752  const Crt::Optional<Crt::ByteBuf> &payload,
753  OnMessageFlushCallback onMessageFlushCallback) noexcept;
754 
755  std::future<RpcError> SendPingResponse(
756  const Crt::List<EventStreamHeader> &headers,
757  const Crt::Optional<Crt::ByteBuf> &payload,
758  OnMessageFlushCallback onMessageFlushCallback) noexcept;
759 
766  ClientContinuation NewStream(ClientContinuationHandler &clientContinuationHandler) noexcept;
767 
771  void Close() noexcept;
772 
777  bool IsOpen() const noexcept
778  {
779  if (this->m_underlyingConnection == nullptr)
780  {
781  return false;
782  }
783  else
784  {
785  return aws_event_stream_rpc_client_connection_is_open(this->m_underlyingConnection);
786  }
787  }
788 
792  operator bool() const noexcept { return IsOpen(); }
793 
794  private:
795  friend class ClientContinuation;
796  friend std::future<RpcError> ClientOperation::Close(OnMessageFlushCallback onMessageFlushCallback) noexcept;
797  enum ClientState
798  {
799  DISCONNECTED = 1,
800  CONNECTING_SOCKET,
801  WAITING_FOR_CONNECT_ACK,
802  CONNECTED,
803  DISCONNECTING,
804  };
805  /* This recursive mutex protects m_clientState & m_connectionWillSetup */
806  std::recursive_mutex m_stateMutex;
807  Crt::Allocator *m_allocator;
808  struct aws_event_stream_rpc_client_connection *m_underlyingConnection;
809  ClientState m_clientState;
810  ConnectionLifecycleHandler *m_lifecycleHandler;
811  ConnectMessageAmender m_connectMessageAmender;
812  std::promise<void> m_connectionSetupPromise;
813  bool m_connectionWillSetup;
814  std::promise<RpcError> m_connectAckedPromise;
815  std::promise<RpcError> m_closedPromise;
816  bool m_onConnectCalled;
817  RpcError m_closeReason;
818  OnMessageFlushCallback m_onConnectRequestCallback;
819  Crt::Io::SocketOptions m_socketOptions;
820  ConnectionConfig m_connectionConfig;
821  std::future<RpcError> SendProtocolMessage(
822  const Crt::List<EventStreamHeader> &headers,
823  const Crt::Optional<Crt::ByteBuf> &payload,
824  MessageType messageType,
825  uint32_t messageFlags,
826  OnMessageFlushCallback onMessageFlushCallback) noexcept;
827 
828  static void s_onConnectionShutdown(
829  struct aws_event_stream_rpc_client_connection *connection,
830  int errorCode,
831  void *userData) noexcept;
832  static void s_onConnectionSetup(
833  struct aws_event_stream_rpc_client_connection *connection,
834  int errorCode,
835  void *userData) noexcept;
836  static void s_onProtocolMessage(
837  struct aws_event_stream_rpc_client_connection *connection,
838  const struct aws_event_stream_rpc_message_args *messageArgs,
839  void *userData) noexcept;
840 
841  static void s_protocolMessageCallback(int errorCode, void *userData) noexcept;
842 
846  static std::future<RpcError> s_sendProtocolMessage(
847  ClientConnection *connection,
848  const Crt::List<EventStreamHeader> &headers,
849  const Crt::Optional<Crt::ByteBuf> &payload,
850  MessageType messageType,
851  uint32_t messageFlags,
852  OnMessageFlushCallback onMessageFlushCallback) noexcept;
853 
854  static std::future<RpcError> s_sendPing(
855  ClientConnection *connection,
856  const Crt::List<EventStreamHeader> &headers,
857  const Crt::Optional<Crt::ByteBuf> &payload,
858  OnMessageFlushCallback onMessageFlushCallback) noexcept;
859 
860  static std::future<RpcError> s_sendPingResponse(
861  ClientConnection *connection,
862  const Crt::List<EventStreamHeader> &headers,
863  const Crt::Optional<Crt::ByteBuf> &payload,
864  OnMessageFlushCallback onMessageFlushCallback) noexcept;
865  };
866  } // namespace Eventstreamrpc
867 } // namespace Aws
Aws::Eventstreamrpc::ClientContinuation
Definition: EventStreamClient.h:311
Aws::Eventstreamrpc::EVENT_STREAM_RPC_CONTINUATION_CLOSED
@ EVENT_STREAM_RPC_CONTINUATION_CLOSED
Definition: EventStreamClient.h:206
Aws::Eventstreamrpc::ConnectionConfig::GetClientBootstrap
Crt::Io::ClientBootstrap * GetClientBootstrap() const noexcept
Definition: EventStreamClient.h:156
Aws::Eventstreamrpc::ConnectionConfig::m_socketOptions
Crt::Optional< Crt::Io::SocketOptions > m_socketOptions
Definition: EventStreamClient.h:189
Aws::Eventstreamrpc::RpcError
Definition: EventStreamClient.h:214
Aws::Eventstreamrpc::ClientContinuationHandler::OnContinuationMessage
virtual void OnContinuationMessage(const Crt::List< EventStreamHeader > &headers, const Crt::Optional< Crt::ByteBuf > &payload, MessageType messageType, uint32_t messageFlags)=0
Aws::Eventstreamrpc::TaggedResult::GetResultType
ResultType GetResultType() const noexcept
Definition: EventStreamClient.h:491
Aws::Eventstreamrpc::ConnectionConfig::SetSocketOptions
void SetSocketOptions(const Crt::Io::SocketOptions &socketOptions) noexcept
Definition: EventStreamClient.h:165
Aws::Eventstreamrpc::EVENT_STREAM_RPC_CRT_ERROR
@ EVENT_STREAM_RPC_CRT_ERROR
Definition: EventStreamClient.h:210
Aws::Eventstreamrpc::ConnectionLifecycleHandler
Definition: EventStreamClient.h:225
Aws::Eventstreamrpc::OperationError
Definition: EventStreamClient.h:406
Aws::Eventstreamrpc::RPC_ERROR
@ RPC_ERROR
Definition: EventStreamClient.h:447
Aws::Eventstreamrpc::EVENT_STREAM_RPC_ALLOCATION_ERROR
@ EVENT_STREAM_RPC_ALLOCATION_ERROR
Definition: EventStreamClient.h:201
Aws::Eventstreamrpc::LoneResponseRetriever
std::function< ExpectedResponseFactory(const Crt::String &modelName)> LoneResponseRetriever
Definition: EventStreamClient.h:516
Aws::Crt::ScopedResource
std::unique_ptr< T, std::function< void(T *)> > ScopedResource
Definition: Types.h:163
Aws::Eventstreamrpc::ClientOperation::Close
std::future< RpcError > Close(OnMessageFlushCallback onMessageFlushCallback=nullptr) noexcept
Definition: EventStreamClient.cpp:1572
Aws::Eventstreamrpc::ClientConnection::operator=
ClientConnection & operator=(const ClientConnection &) noexcept=delete
Aws::Eventstreamrpc::ContinuationCallbackData::allocator
Crt::Allocator * allocator
Definition: EventStreamClient.h:275
JsonObject.h
Aws::Eventstreamrpc::EVENT_STREAM_RPC_CONNECTION_CLOSED
@ EVENT_STREAM_RPC_CONNECTION_CLOSED
Definition: EventStreamClient.h:205
Aws::Eventstreamrpc::ClientConnection::ClientConnection
ClientConnection(const ClientConnection &) noexcept=delete
Aws::Eventstreamrpc::EventStreamRpcStatusCode
EventStreamRpcStatusCode
Definition: EventStreamClient.h:197
EventLoopGroup.h
TlsOptions.h
Aws::Eventstreamrpc::RpcError::crtError
int crtError
Definition: EventStreamClient.h:216
Aws::Eventstreamrpc::ConnectionConfig::m_clientBootstrap
Crt::Io::ClientBootstrap * m_clientBootstrap
Definition: EventStreamClient.h:191
Aws::Eventstreamrpc::ConnectionConfig::m_connectAmendment
MessageAmendment m_connectAmendment
Definition: EventStreamClient.h:192
DateTime.h
Aws::Eventstreamrpc::ConnectionConfig::GetConnectRequestCallback
OnMessageFlushCallback GetConnectRequestCallback() const noexcept
Definition: EventStreamClient.h:157
Aws::Eventstreamrpc::ClientOperation::operator=
bool operator=(const ClientOperation &clientOperation) noexcept=delete
Aws::Eventstreamrpc::ConnectionConfig::m_port
Crt::Optional< uint32_t > m_port
Definition: EventStreamClient.h:188
Aws::Eventstreamrpc::HeaderValueType
aws_event_stream_header_value_type HeaderValueType
Definition: EventStreamClient.h:45
Aws::Eventstreamrpc::EventStreamHeader
Definition: EventStreamClient.h:65
StlAllocator.h
Aws::Eventstreamrpc::ConnectionConfig::m_tlsConnectionOptions
Crt::Optional< Crt::Io::TlsConnectionOptions > m_tlsConnectionOptions
Definition: EventStreamClient.h:190
Aws::Eventstreamrpc::ConnectionConfig::SetConnectAmendment
void SetConnectAmendment(const MessageAmendment &connectAmendment) noexcept
Definition: EventStreamClient.h:169
Aws::Crt::List
std::list< T, StlAllocator< T > > List
Definition: Types.h:54
Aws::Eventstreamrpc::StreamingResponseRetriever
std::function< ExpectedResponseFactory(const Crt::String &modelName)> StreamingResponseRetriever
Definition: EventStreamClient.h:517
Aws::Crt::Io::TlsConnectionOptions
Definition: TlsOptions.h:293
Aws::Eventstreamrpc::OPERATION_ERROR
@ OPERATION_ERROR
Definition: EventStreamClient.h:446
Aws::Eventstreamrpc::ClientConnection
Definition: EventStreamClient.h:729
Aws::Eventstreamrpc::ClientOperation::ClientOperation
ClientOperation(ClientOperation &&clientOperation) noexcept=delete
Aws::Eventstreamrpc::ServiceModel::~ServiceModel
virtual ~ServiceModel() noexcept=default
Aws::Eventstreamrpc::ConnectionConfig::m_connectRequestCallback
OnMessageFlushCallback m_connectRequestCallback
Definition: EventStreamClient.h:193
Aws::Eventstreamrpc::EVENT_STREAM_RPC_UNMAPPED_DATA
@ EVENT_STREAM_RPC_UNMAPPED_DATA
Definition: EventStreamClient.h:208
Aws::Eventstreamrpc::EVENT_STREAM_RPC_CONNECTION_ALREADY_ESTABLISHED
@ EVENT_STREAM_RPC_CONNECTION_ALREADY_ESTABLISHED
Definition: EventStreamClient.h:204
Aws::Eventstreamrpc::ClientOperation::operator=
bool operator=(ClientOperation &&clientOperation) noexcept=delete
Aws::Eventstreamrpc::TaggedResult
Definition: EventStreamClient.h:454
Aws::Eventstreamrpc::ClientContinuationHandler
Definition: EventStreamClient.h:282
Aws::Eventstreamrpc::ConnectionConfig
Definition: EventStreamClient.h:145
Aws::Eventstreamrpc::StreamResponseHandler
Definition: EventStreamClient.h:420
Aws::Eventstreamrpc::EVENT_STREAM_RPC_CONNECTION_SETUP_FAILED
@ EVENT_STREAM_RPC_CONNECTION_SETUP_FAILED
Definition: EventStreamClient.h:202
Aws::Eventstreamrpc::ClientContinuationHandler::~ClientContinuationHandler
virtual ~ClientContinuationHandler() noexcept=default
Aws::Eventstreamrpc::RpcError::baseStatus
EventStreamRpcStatusCode baseStatus
Definition: EventStreamClient.h:215
Aws::Eventstreamrpc::ContinuationCallbackData::callbackMutex
std::mutex callbackMutex
Definition: EventStreamClient.h:273
Aws::Eventstreamrpc::ClientOperation::ClientOperation
ClientOperation(const ClientOperation &clientOperation) noexcept=delete
Exports.h
Aws::Eventstreamrpc::ConnectionConfig::GetConnectMessageAmender
ConnectMessageAmender GetConnectMessageAmender() const noexcept
Definition: EventStreamClient.h:158
Aws::Eventstreamrpc::OperationModelContext::~OperationModelContext
virtual ~OperationModelContext() noexcept=default
Aws::Eventstreamrpc::AbstractShapeBase::~AbstractShapeBase
virtual ~AbstractShapeBase() noexcept=default
Aws::Eventstreamrpc::ResponseRetriever
Definition: EventStreamClient.h:521
Aws::Eventstreamrpc::ConnectionConfig::GetTlsConnectionOptions
Crt::Optional< Crt::Io::TlsConnectionOptions > GetTlsConnectionOptions() const noexcept
Definition: EventStreamClient.h:152
Aws::Eventstreamrpc::ConnectMessageAmender
std::function< const MessageAmendment &(void)> ConnectMessageAmender
Definition: EventStreamClient.h:59
Aws::Eventstreamrpc::ConnectionConfig::ConnectionConfig
ConnectionConfig() noexcept
Definition: EventStreamClient.h:147
Aws::Eventstreamrpc::ConnectionConfig::SetPort
void SetPort(uint32_t port) noexcept
Definition: EventStreamClient.h:164
Aws::Crt::Optional< Crt::ByteBuf >
Aws::Eventstreamrpc::ErrorResponseFactory
std::function< Crt::ScopedResource< OperationError >(const Crt::StringView &payload, Crt::Allocator *allocator)> ErrorResponseFactory
Definition: EventStreamClient.h:514
Aws::Crt::g_allocator
AWS_CRT_CPP_API Allocator * g_allocator
Definition: Allocator.cpp:22
Aws::Eventstreamrpc::ClientOperation
Definition: EventStreamClient.h:622
Aws::Eventstreamrpc::ExpectedResponseFactory
std::function< Crt::ScopedResource< AbstractShapeBase >(const Crt::StringView &payload, Crt::Allocator *allocator)> ExpectedResponseFactory
Definition: EventStreamClient.h:512
Aws::Eventstreamrpc::ErrorResponseRetriever
std::function< ErrorResponseFactory(const Crt::String &modelName)> ErrorResponseRetriever
Definition: EventStreamClient.h:518
Aws::Eventstreamrpc::ConnectionConfig::m_hostName
Crt::Optional< Crt::String > m_hostName
Definition: EventStreamClient.h:187
Aws::Eventstreamrpc::OPERATION_RESPONSE
@ OPERATION_RESPONSE
Definition: EventStreamClient.h:445
Aws::Eventstreamrpc::EventStreamHeader::operator==
bool operator==(const EventStreamHeader &other) const noexcept
Aws::Eventstreamrpc::ConnectionConfig::GetConnectAmendment
Crt::Optional< MessageAmendment > GetConnectAmendment() const noexcept
Definition: EventStreamClient.h:151
Aws::Eventstreamrpc::ResultType
ResultType
Definition: EventStreamClient.h:444
Aws::Eventstreamrpc::EVENT_STREAM_RPC_SUCCESS
@ EVENT_STREAM_RPC_SUCCESS
Definition: EventStreamClient.h:198
Types.h
Aws::Eventstreamrpc::ServiceModel
Definition: EventStreamClient.h:534
Aws::Eventstreamrpc::ConnectionConfig::SetConnectRequestCallback
void SetConnectRequestCallback(OnMessageFlushCallback connectRequestCallback) noexcept
Definition: EventStreamClient.h:181
Aws::Eventstreamrpc::ContinuationCallbackData::clientContinuation
ClientContinuation * clientContinuation
Definition: EventStreamClient.h:274
Aws::Eventstreamrpc::EVENT_STREAM_RPC_UNINITIALIZED
@ EVENT_STREAM_RPC_UNINITIALIZED
Definition: EventStreamClient.h:200
Aws::Eventstreamrpc::OperationError::OperationError
OperationError() noexcept=default
Aws::Eventstreamrpc::EVENT_STREAM_RPC_UNKNOWN_PROTOCOL_MESSAGE
@ EVENT_STREAM_RPC_UNKNOWN_PROTOCOL_MESSAGE
Definition: EventStreamClient.h:207
Aws::Eventstreamrpc::ContinuationCallbackData::continuationDestroyed
bool continuationDestroyed
Definition: EventStreamClient.h:272
Aws::Eventstreamrpc::OnMessageFlushCallback
std::function< void(int errorCode)> OnMessageFlushCallback
Definition: EventStreamClient.h:52
Aws::Crt::StringView
string_view StringView
Definition: StringView.h:856
Aws::Crt::Io::SocketOptions
Definition: SocketOptions.h:48
Aws::Eventstreamrpc::ConnectionConfig::SetTlsConnectionOptions
void SetTlsConnectionOptions(Crt::Io::TlsConnectionOptions tlsConnectionOptions) noexcept
Definition: EventStreamClient.h:173
Aws::Crt::basic_string_view
Definition: StringView.h:33
Aws::Crt::ByteBuf
aws_byte_buf ByteBuf
Definition: Types.h:30
std
Definition: StringView.h:862
Aws::Eventstreamrpc::EVENT_STREAM_RPC_NULL_PARAMETER
@ EVENT_STREAM_RPC_NULL_PARAMETER
Definition: EventStreamClient.h:199
Aws
Definition: Allocator.h:11
Aws::Eventstreamrpc::ConnectionLifecycleHandler::~ConnectionLifecycleHandler
virtual ~ConnectionLifecycleHandler() noexcept=default
SocketOptions.h
Aws::Eventstreamrpc::StreamResponseHandler::~StreamResponseHandler
virtual ~StreamResponseHandler() noexcept=default
Aws::Crt::Allocator
aws_allocator Allocator
Definition: Allocator.h:14
HostResolver.h
Aws::Eventstreamrpc::ContinuationCallbackData::ContinuationCallbackData
ContinuationCallbackData(ClientContinuation *clientContinuation, Crt::Allocator *allocator=Crt::g_allocator) noexcept
Definition: EventStreamClient.h:264
Aws::Eventstreamrpc::EVENT_STREAM_RPC_CONNECTION_ACCESS_DENIED
@ EVENT_STREAM_RPC_CONNECTION_ACCESS_DENIED
Definition: EventStreamClient.h:203
Aws::Eventstreamrpc::ConnectionConfig::SetClientBootstrap
void SetClientBootstrap(Crt::Io::ClientBootstrap *clientBootstrap) noexcept
Definition: EventStreamClient.h:177
AWS_EVENTSTREAMRPC_API
#define AWS_EVENTSTREAMRPC_API
Definition: Exports.h:19
Aws::Eventstreamrpc::ResponseRetriever::~ResponseRetriever
virtual ~ResponseRetriever() noexcept=default
Aws::Crt::Io::ClientBootstrap
Definition: Bootstrap.h:35
Aws::Eventstreamrpc::OperationModelContext
Definition: EventStreamClient.h:547
Aws::Eventstreamrpc::AbstractShapeBase
Definition: EventStreamClient.h:390
Aws::Eventstreamrpc::ConnectionConfig::GetSocketOptions
Crt::Optional< Crt::Io::SocketOptions > GetSocketOptions() const noexcept
Definition: EventStreamClient.h:150
Aws::Eventstreamrpc::ContinuationCallbackData::ContinuationCallbackData
ContinuationCallbackData(const ContinuationCallbackData &lhs) noexcept=delete
UUID.h
Aws::Eventstreamrpc::EVENT_STREAM_RPC_UNSUPPORTED_CONTENT_TYPE
@ EVENT_STREAM_RPC_UNSUPPORTED_CONTENT_TYPE
Definition: EventStreamClient.h:209
Aws::Eventstreamrpc::MessageAmendment
Definition: EventStreamClient.h:99
Aws::Eventstreamrpc::MessageType
aws_event_stream_rpc_message_type MessageType
Definition: EventStreamClient.h:46
Aws::Eventstreamrpc::ConnectionConfig::SetHostName
void SetHostName(Crt::String hostName) noexcept
Definition: EventStreamClient.h:163
Aws::Crt::String
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition: Types.h:45
Aws::Eventstreamrpc::ConnectionConfig::GetHostName
Crt::Optional< Crt::String > GetHostName() const noexcept
Definition: EventStreamClient.h:148
Aws::Eventstreamrpc::ConnectionConfig::GetPort
Crt::Optional< uint32_t > GetPort() const noexcept
Definition: EventStreamClient.h:149
Aws::Eventstreamrpc::ContinuationCallbackData
Definition: EventStreamClient.h:262
Aws::Eventstreamrpc::ClientContinuationHandler::OnContinuationClosed
virtual void OnContinuationClosed()=0