AWS IoT Device SDK C++ v2
1.36.0
AWS IoT Device SDK C++ v2
|
Go to the documentation of this file.
20 #include <aws/event-stream/event_stream_rpc_client.h>
21 #include <aws/io/host_resolver.h>
34 class ClientBootstrap;
37 namespace Eventstreamrpc
72 const struct aws_event_stream_header_value_pair &header,
81 bool GetValueAsString(
Crt::String &)
const noexcept;
83 const struct aws_event_stream_header_value_pair *GetUnderlyingHandle()
const;
90 struct aws_event_stream_header_value_pair m_underlyingHandle;
147 ConnectionConfig() noexcept : m_clientBootstrap(
nullptr), m_connectRequestCallback(
nullptr) {}
154 return m_tlsConnectionOptions;
160 return [&](void) ->
const MessageAmendment & {
return m_connectAmendment; };
164 void SetPort(uint32_t port) noexcept { m_port = port; }
167 m_socketOptions = socketOptions;
171 m_connectAmendment = connectAmendment;
175 m_tlsConnectionOptions = tlsConnectionOptions;
179 m_clientBootstrap = clientBootstrap;
183 m_connectRequestCallback = connectRequestCallback;
234 virtual
void OnConnectCallback();
240 virtual
void OnDisconnectCallback(
RpcError status);
248 virtual
bool OnErrorCallback(
RpcError status);
253 virtual
void OnPingCallback(
255 const Crt::Optional<Crt::
ByteBuf> &payload);
267 : clientContinuation(clientContinuation), allocator(allocator)
269 continuationDestroyed =
false;
291 uint32_t messageFlags) = 0;
339 std::future<RpcError> Activate(
344 uint32_t messageFlags,
351 bool IsClosed() noexcept;
363 std::future<RpcError> SendMessage(
367 uint32_t messageFlags,
374 struct aws_event_stream_rpc_client_continuation_token *m_continuationToken;
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;
395 virtual
void SerializeToJsonObject(Crt::JsonObject &payloadObject) const = 0;
396 virtual Crt::
String GetModelName() const noexcept = 0;
410 virtual
void SerializeToJsonObject(Crt::JsonObject &payloadObject) const override;
411 virtual Crt::Optional<Crt::
String> GetMessage() noexcept = 0;
427 virtual
void OnStreamClosed();
467 operator bool()
const noexcept;
485 RpcError GetRpcError()
const noexcept;
497 : m_response(std::move(response))
501 OperationResult() noexcept : m_response(
nullptr) {}
502 ~OperationResult() noexcept {};
503 Crt::ScopedResource<AbstractShapeBase> m_response;
504 Crt::ScopedResource<OperationError> m_error;
507 OperationResult m_operationResult;
526 const Crt::
String &modelName) const noexcept = 0;
528 const Crt::
String &modelName) const noexcept = 0;
530 const Crt::
String &modelName) const noexcept = 0;
538 const Crt::
String &errorModelName,
540 Crt::
Allocator *allocator) const noexcept = 0;
561 Crt::
Allocator *allocator) const noexcept = 0;
571 Crt::
Allocator *allocator) const noexcept = 0;
577 virtual Crt::
String GetInitialResponseModelName() const noexcept = 0;
583 virtual Crt::
String GetRequestModelName() const noexcept = 0;
589 virtual Crt::Optional<Crt::
String> GetStreamingResponseModelName() const noexcept = 0;
597 virtual Crt::
String GetOperationName() const noexcept = 0;
607 const Crt::
String &errorModelName,
609 Crt::
Allocator *allocator) const noexcept
611 return m_serviceModel.AllocateOperationErrorFromPayload(errorModelName, stringView, allocator);
626 std::shared_ptr<StreamResponseHandler> streamHandler,
655 void WithLaunchMode(
std::launch mode) noexcept;
673 virtual Crt::
String GetModelName() const noexcept = 0;
676 std::launch m_asyncLaunchMode;
681 const Crt::
String &modelName,
682 const Crt::Optional<Crt::
ByteBuf> &payload,
683 uint32_t messageFlags);
687 void OnContinuationMessage(
689 const Crt::Optional<Crt::
ByteBuf> &payload,
691 uint32_t messageFlags) override;
699 void OnContinuationClosed() override;
703 const Crt::
String &name) noexcept;
712 uint32_t m_messageCount;
714 std::shared_ptr<StreamResponseHandler> m_streamHandler;
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;
748 Crt::Io::ClientBootstrap &clientBootstrap) noexcept;
752 const Crt::Optional<Crt::
ByteBuf> &payload,
757 const Crt::Optional<Crt::
ByteBuf> &payload,
771 void Close() noexcept;
777 bool IsOpen() const noexcept
779 if (this->m_underlyingConnection ==
nullptr)
785 return aws_event_stream_rpc_client_connection_is_open(this->m_underlyingConnection);
792 operator bool() const noexcept {
return IsOpen(); }
801 WAITING_FOR_CONNECT_ACK,
806 std::recursive_mutex m_stateMutex;
808 struct aws_event_stream_rpc_client_connection *m_underlyingConnection;
809 ClientState m_clientState;
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;
821 std::future<RpcError> SendProtocolMessage(
825 uint32_t messageFlags,
828 static void s_onConnectionShutdown(
829 struct aws_event_stream_rpc_client_connection *connection,
831 void *userData) noexcept;
832 static void s_onConnectionSetup(
833 struct aws_event_stream_rpc_client_connection *connection,
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;
841 static void s_protocolMessageCallback(
int errorCode,
void *userData) noexcept;
846 static std::future<RpcError> s_sendProtocolMessage(
851 uint32_t messageFlags,
854 static std::future<RpcError> s_sendPing(
860 static std::future<RpcError> s_sendPingResponse(
Definition: EventStreamClient.h:311
@ EVENT_STREAM_RPC_CONTINUATION_CLOSED
Definition: EventStreamClient.h:206
Crt::Io::ClientBootstrap * GetClientBootstrap() const noexcept
Definition: EventStreamClient.h:156
Crt::Optional< Crt::Io::SocketOptions > m_socketOptions
Definition: EventStreamClient.h:189
Definition: EventStreamClient.h:214
virtual void OnContinuationMessage(const Crt::List< EventStreamHeader > &headers, const Crt::Optional< Crt::ByteBuf > &payload, MessageType messageType, uint32_t messageFlags)=0
ResultType GetResultType() const noexcept
Definition: EventStreamClient.h:491
void SetSocketOptions(const Crt::Io::SocketOptions &socketOptions) noexcept
Definition: EventStreamClient.h:165
@ EVENT_STREAM_RPC_CRT_ERROR
Definition: EventStreamClient.h:210
Definition: EventStreamClient.h:225
Definition: EventStreamClient.h:406
@ RPC_ERROR
Definition: EventStreamClient.h:447
@ EVENT_STREAM_RPC_ALLOCATION_ERROR
Definition: EventStreamClient.h:201
std::function< ExpectedResponseFactory(const Crt::String &modelName)> LoneResponseRetriever
Definition: EventStreamClient.h:516
std::unique_ptr< T, std::function< void(T *)> > ScopedResource
Definition: Types.h:163
std::future< RpcError > Close(OnMessageFlushCallback onMessageFlushCallback=nullptr) noexcept
Definition: EventStreamClient.cpp:1572
ClientConnection & operator=(const ClientConnection &) noexcept=delete
Crt::Allocator * allocator
Definition: EventStreamClient.h:275
@ EVENT_STREAM_RPC_CONNECTION_CLOSED
Definition: EventStreamClient.h:205
ClientConnection(const ClientConnection &) noexcept=delete
EventStreamRpcStatusCode
Definition: EventStreamClient.h:197
int crtError
Definition: EventStreamClient.h:216
Crt::Io::ClientBootstrap * m_clientBootstrap
Definition: EventStreamClient.h:191
MessageAmendment m_connectAmendment
Definition: EventStreamClient.h:192
OnMessageFlushCallback GetConnectRequestCallback() const noexcept
Definition: EventStreamClient.h:157
bool operator=(const ClientOperation &clientOperation) noexcept=delete
Crt::Optional< uint32_t > m_port
Definition: EventStreamClient.h:188
aws_event_stream_header_value_type HeaderValueType
Definition: EventStreamClient.h:45
Crt::Optional< Crt::Io::TlsConnectionOptions > m_tlsConnectionOptions
Definition: EventStreamClient.h:190
void SetConnectAmendment(const MessageAmendment &connectAmendment) noexcept
Definition: EventStreamClient.h:169
std::list< T, StlAllocator< T > > List
Definition: Types.h:54
std::function< ExpectedResponseFactory(const Crt::String &modelName)> StreamingResponseRetriever
Definition: EventStreamClient.h:517
Definition: TlsOptions.h:293
@ OPERATION_ERROR
Definition: EventStreamClient.h:446
Definition: EventStreamClient.h:729
ClientOperation(ClientOperation &&clientOperation) noexcept=delete
virtual ~ServiceModel() noexcept=default
OnMessageFlushCallback m_connectRequestCallback
Definition: EventStreamClient.h:193
@ EVENT_STREAM_RPC_UNMAPPED_DATA
Definition: EventStreamClient.h:208
@ EVENT_STREAM_RPC_CONNECTION_ALREADY_ESTABLISHED
Definition: EventStreamClient.h:204
bool operator=(ClientOperation &&clientOperation) noexcept=delete
Definition: EventStreamClient.h:454
Definition: EventStreamClient.h:282
Definition: EventStreamClient.h:145
Definition: EventStreamClient.h:420
@ EVENT_STREAM_RPC_CONNECTION_SETUP_FAILED
Definition: EventStreamClient.h:202
virtual ~ClientContinuationHandler() noexcept=default
EventStreamRpcStatusCode baseStatus
Definition: EventStreamClient.h:215
std::mutex callbackMutex
Definition: EventStreamClient.h:273
ClientOperation(const ClientOperation &clientOperation) noexcept=delete
ConnectMessageAmender GetConnectMessageAmender() const noexcept
Definition: EventStreamClient.h:158
virtual ~OperationModelContext() noexcept=default
virtual ~AbstractShapeBase() noexcept=default
Definition: EventStreamClient.h:521
Crt::Optional< Crt::Io::TlsConnectionOptions > GetTlsConnectionOptions() const noexcept
Definition: EventStreamClient.h:152
std::function< const MessageAmendment &(void)> ConnectMessageAmender
Definition: EventStreamClient.h:59
ConnectionConfig() noexcept
Definition: EventStreamClient.h:147
void SetPort(uint32_t port) noexcept
Definition: EventStreamClient.h:164
std::function< Crt::ScopedResource< OperationError >(const Crt::StringView &payload, Crt::Allocator *allocator)> ErrorResponseFactory
Definition: EventStreamClient.h:514
AWS_CRT_CPP_API Allocator * g_allocator
Definition: Allocator.cpp:22
Definition: EventStreamClient.h:622
std::function< Crt::ScopedResource< AbstractShapeBase >(const Crt::StringView &payload, Crt::Allocator *allocator)> ExpectedResponseFactory
Definition: EventStreamClient.h:512
std::function< ErrorResponseFactory(const Crt::String &modelName)> ErrorResponseRetriever
Definition: EventStreamClient.h:518
Crt::Optional< Crt::String > m_hostName
Definition: EventStreamClient.h:187
@ OPERATION_RESPONSE
Definition: EventStreamClient.h:445
Crt::Optional< MessageAmendment > GetConnectAmendment() const noexcept
Definition: EventStreamClient.h:151
ResultType
Definition: EventStreamClient.h:444
@ EVENT_STREAM_RPC_SUCCESS
Definition: EventStreamClient.h:198
Definition: EventStreamClient.h:534
void SetConnectRequestCallback(OnMessageFlushCallback connectRequestCallback) noexcept
Definition: EventStreamClient.h:181
ClientContinuation * clientContinuation
Definition: EventStreamClient.h:274
@ EVENT_STREAM_RPC_UNINITIALIZED
Definition: EventStreamClient.h:200
OperationError() noexcept=default
@ EVENT_STREAM_RPC_UNKNOWN_PROTOCOL_MESSAGE
Definition: EventStreamClient.h:207
bool continuationDestroyed
Definition: EventStreamClient.h:272
std::function< void(int errorCode)> OnMessageFlushCallback
Definition: EventStreamClient.h:52
string_view StringView
Definition: StringView.h:856
Definition: SocketOptions.h:48
void SetTlsConnectionOptions(Crt::Io::TlsConnectionOptions tlsConnectionOptions) noexcept
Definition: EventStreamClient.h:173
Definition: StringView.h:33
aws_byte_buf ByteBuf
Definition: Types.h:30
Definition: StringView.h:862
@ EVENT_STREAM_RPC_NULL_PARAMETER
Definition: EventStreamClient.h:199
Definition: Allocator.h:11
virtual ~ConnectionLifecycleHandler() noexcept=default
virtual ~StreamResponseHandler() noexcept=default
aws_allocator Allocator
Definition: Allocator.h:14
ContinuationCallbackData(ClientContinuation *clientContinuation, Crt::Allocator *allocator=Crt::g_allocator) noexcept
Definition: EventStreamClient.h:264
@ EVENT_STREAM_RPC_CONNECTION_ACCESS_DENIED
Definition: EventStreamClient.h:203
void SetClientBootstrap(Crt::Io::ClientBootstrap *clientBootstrap) noexcept
Definition: EventStreamClient.h:177
#define AWS_EVENTSTREAMRPC_API
Definition: Exports.h:19
virtual ~ResponseRetriever() noexcept=default
Definition: Bootstrap.h:35
Definition: EventStreamClient.h:547
Definition: EventStreamClient.h:390
Crt::Optional< Crt::Io::SocketOptions > GetSocketOptions() const noexcept
Definition: EventStreamClient.h:150
ContinuationCallbackData(const ContinuationCallbackData &lhs) noexcept=delete
@ EVENT_STREAM_RPC_UNSUPPORTED_CONTENT_TYPE
Definition: EventStreamClient.h:209
Definition: EventStreamClient.h:99
aws_event_stream_rpc_message_type MessageType
Definition: EventStreamClient.h:46
void SetHostName(Crt::String hostName) noexcept
Definition: EventStreamClient.h:163
std::basic_string< char, std::char_traits< char >, StlAllocator< char > > String
Definition: Types.h:45
Crt::Optional< Crt::String > GetHostName() const noexcept
Definition: EventStreamClient.h:148
Crt::Optional< uint32_t > GetPort() const noexcept
Definition: EventStreamClient.h:149
Definition: EventStreamClient.h:262
virtual void OnContinuationClosed()=0