Skip to content

Commit

Permalink
Event loop accessor for request response client
Browse files Browse the repository at this point in the history
  • Loading branch information
Bret Ambrose committed Sep 12, 2024
1 parent 9614d92 commit 6475825
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 1 deletion.
8 changes: 8 additions & 0 deletions include/aws/mqtt/private/request-response/protocol_adapter.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include <aws/common/byte_buf.h>

struct aws_allocator;
struct aws_event_loop;
struct aws_mqtt_client_connection;
struct aws_mqtt5_client;

Expand Down Expand Up @@ -143,6 +144,8 @@ struct aws_mqtt_protocol_adapter_vtable {
int (*aws_mqtt_protocol_adapter_publish_fn)(void *, struct aws_protocol_adapter_publish_options *);

bool (*aws_mqtt_protocol_adapter_is_connected_fn)(void *);

struct aws_event_loop *(*aws_mqtt_protocol_adapter_get_event_loop_fn)(void *);
};

struct aws_mqtt_protocol_adapter {
Expand Down Expand Up @@ -201,6 +204,11 @@ AWS_MQTT_API int aws_mqtt_protocol_adapter_publish(
*/
AWS_MQTT_API bool aws_mqtt_protocol_adapter_is_connected(struct aws_mqtt_protocol_adapter *adapter);

/*
* Returns the event loop that the protocol client is bound to.
*/
AWS_MQTT_API struct aws_event_loop *aws_mqtt_protocol_adapter_get_event_loop(struct aws_mqtt_protocol_adapter *adapter);

AWS_MQTT_API const char *aws_protocol_adapter_subscription_event_type_to_c_str(
enum aws_protocol_adapter_subscription_event_type type);

Expand Down
7 changes: 7 additions & 0 deletions include/aws/mqtt/request-response/request_response_client.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

#include <aws/mqtt/mqtt.h>

struct aws_event_loop;
struct aws_mqtt_request_response_client;
struct aws_mqtt_client_connection;
struct aws_mqtt5_client;
Expand Down Expand Up @@ -245,6 +246,12 @@ AWS_MQTT_API struct aws_mqtt_rr_client_operation *aws_mqtt_request_response_clie
struct aws_mqtt_request_response_client *client,
const struct aws_mqtt_streaming_operation_options *streaming_options);

/*
* Returns the event loop used by the request-response client's protocol client
*/
AWS_MQTT_API struct aws_event_loop *aws_mqtt_request_response_client_get_event_loop(
struct aws_mqtt_request_response_client *client);

/*
* Initiates a streaming operation's subscription process.
*/
Expand Down
19 changes: 18 additions & 1 deletion source/request-response/protocol_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,12 +457,19 @@ static void s_protocol_adapter_mqtt311_listener_termination_callback(void *user_
}
}

static struct aws_event_loop *s_aws_mqtt_protocol_adapter_311_get_event_loop(void *impl) {
struct aws_mqtt_protocol_adapter_311_impl *adapter = impl;

return adapter->loop;
}

static struct aws_mqtt_protocol_adapter_vtable s_protocol_adapter_mqtt311_vtable = {
.aws_mqtt_protocol_adapter_destroy_fn = s_aws_mqtt_protocol_adapter_311_destroy,
.aws_mqtt_protocol_adapter_subscribe_fn = s_aws_mqtt_protocol_adapter_311_subscribe,
.aws_mqtt_protocol_adapter_unsubscribe_fn = s_aws_mqtt_protocol_adapter_311_unsubscribe,
.aws_mqtt_protocol_adapter_publish_fn = s_aws_mqtt_protocol_adapter_311_publish,
.aws_mqtt_protocol_adapter_is_connected_fn = s_aws_mqtt_protocol_adapter_311_is_connected,
.aws_mqtt_protocol_adapter_get_event_loop_fn = s_aws_mqtt_protocol_adapter_311_get_event_loop,
};

struct aws_mqtt_protocol_adapter *aws_mqtt_protocol_adapter_new_from_311(
Expand Down Expand Up @@ -848,13 +855,19 @@ static void s_protocol_adapter_mqtt5_listener_termination_callback(void *user_da
}
}

static struct aws_event_loop *s_aws_mqtt_protocol_adapter_5_get_event_loop(void *impl) {
struct aws_mqtt_protocol_adapter_5_impl *adapter = impl;

return adapter->loop;
}

static struct aws_mqtt_protocol_adapter_vtable s_protocol_adapter_mqtt5_vtable = {
.aws_mqtt_protocol_adapter_destroy_fn = s_aws_mqtt_protocol_adapter_5_destroy,
.aws_mqtt_protocol_adapter_subscribe_fn = s_aws_mqtt_protocol_adapter_5_subscribe,
.aws_mqtt_protocol_adapter_unsubscribe_fn = s_aws_mqtt_protocol_adapter_5_unsubscribe,
.aws_mqtt_protocol_adapter_publish_fn = s_aws_mqtt_protocol_adapter_5_publish,
.aws_mqtt_protocol_adapter_is_connected_fn = s_aws_mqtt_protocol_adapter_5_is_connected,
};
.aws_mqtt_protocol_adapter_get_event_loop_fn = s_aws_mqtt_protocol_adapter_5_get_event_loop};

struct aws_mqtt_protocol_adapter *aws_mqtt_protocol_adapter_new_from_5(
struct aws_allocator *allocator,
Expand Down Expand Up @@ -921,6 +934,10 @@ bool aws_mqtt_protocol_adapter_is_connected(struct aws_mqtt_protocol_adapter *ad
return (*adapter->vtable->aws_mqtt_protocol_adapter_is_connected_fn)(adapter->impl);
}

struct aws_event_loop *aws_mqtt_protocol_adapter_get_event_loop(struct aws_mqtt_protocol_adapter *adapter) {
return (*adapter->vtable->aws_mqtt_protocol_adapter_get_event_loop_fn)(adapter->impl);
}

const char *aws_protocol_adapter_subscription_event_type_to_c_str(
enum aws_protocol_adapter_subscription_event_type type) {
switch (type) {
Expand Down
6 changes: 6 additions & 0 deletions source/request-response/request_response_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -2268,3 +2268,9 @@ struct aws_mqtt_rr_client_operation *aws_mqtt_rr_client_operation_release(

return NULL;
}

struct aws_event_loop *aws_mqtt_request_response_client_get_event_loop(
struct aws_mqtt_request_response_client *client) {

return aws_mqtt_protocol_adapter_get_event_loop(client->client_adapter);
}

0 comments on commit 6475825

Please sign in to comment.