django-vue3-admin-web/node_modules/aws-crt/source/mqtt_client.c
2025-10-20 21:21:14 +08:00

75 lines
2.4 KiB
C

/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#include "mqtt_client.h"
#include "io.h"
static void s_mqtt_client_finalize(napi_env env, void *finalize_data, void *finalize_hint) {
(void)env;
(void)finalize_hint;
struct mqtt_nodejs_client *node_client = finalize_data;
AWS_ASSERT(node_client);
struct aws_allocator *allocator = node_client->native_client->allocator;
aws_mqtt_client_release(node_client->native_client);
aws_mem_release(allocator, node_client);
}
napi_value aws_napi_mqtt_client_new(napi_env env, napi_callback_info info) {
struct aws_allocator *allocator = aws_napi_get_allocator();
struct mqtt_nodejs_client *node_client = NULL;
size_t num_args = 1;
napi_value node_client_bootstrap;
AWS_NAPI_CALL(env, napi_get_cb_info(env, info, &num_args, &node_client_bootstrap, NULL, NULL), {
napi_throw_error(env, NULL, "Failed to retreive callback information");
return NULL;
});
if (num_args < 1) {
napi_throw_error(env, NULL, "aws_nodejs_mqtt_client_new needs at least 1 argument");
return NULL;
}
struct aws_client_bootstrap *client_bootstrap = NULL;
struct client_bootstrap_binding *client_bootstrap_binding = NULL;
napi_get_value_external(env, node_client_bootstrap, (void **)&client_bootstrap_binding);
if (client_bootstrap_binding != NULL) {
client_bootstrap = aws_napi_get_client_bootstrap(client_bootstrap_binding);
} else {
client_bootstrap = aws_napi_get_default_client_bootstrap();
}
node_client = aws_mem_acquire(allocator, sizeof(struct mqtt_nodejs_client));
AWS_FATAL_ASSERT(node_client);
AWS_ZERO_STRUCT(*node_client);
node_client->native_client = aws_mqtt_client_new(allocator, client_bootstrap);
if (node_client->native_client == NULL) {
napi_throw_error(env, NULL, "Failed to init client");
goto error;
}
napi_value node_external;
AWS_NAPI_CALL(env, napi_create_external(env, node_client, s_mqtt_client_finalize, NULL, &node_external), {
napi_throw_error(env, NULL, "Failed create n-api external");
goto error;
});
return node_external;
error:
if (node_client) {
aws_mqtt_client_release(node_client->native_client);
aws_mem_release(allocator, node_client);
}
return NULL;
}