From 6c398c803a2a8c8281603589c8eb538c4c271dbd Mon Sep 17 00:00:00 2001 From: liyuxi Date: Thu, 29 Dec 2022 05:54:37 +0000 Subject: [PATCH] add write function for file plugin --- include/neuron/errcodes.h | 7 ++++--- plugins/file/file_plugin.c | 13 +++++++++---- plugins/file/file_req.c | 28 ++++++++++++++++++++++------ plugins/file/file_req.h | 2 ++ 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/include/neuron/errcodes.h b/include/neuron/errcodes.h index fcc96657..021d0a13 100644 --- a/include/neuron/errcodes.h +++ b/include/neuron/errcodes.h @@ -125,9 +125,10 @@ typedef enum { NEU_ERR_MQTT_SUSPENDED = 4015, NEU_ERR_MQTT_PUBLISH_OVER_LENGTH = 4016, - NEU_ERR_FILE_TOO_LONG = 4100, - NEU_ERR_FILE_OPEN_FAILURE = 4101, - NEU_ERR_FILE_READ_FAILURE = 4102, + NEU_ERR_FILE_TOO_LONG = 4100, + NEU_ERR_FILE_OPEN_FAILURE = 4101, + NEU_ERR_FILE_READ_FAILURE = 4102, + NEU_ERR_FILE_WRITE_FAILURE = 4103, NEU_ERR_PLUGIN_ERROR_START = 10000, NEU_ERR_PLUGIN_ERROR_END = 20000, diff --git a/plugins/file/file_plugin.c b/plugins/file/file_plugin.c index 3aa9635d..7e14b081 100644 --- a/plugins/file/file_plugin.c +++ b/plugins/file/file_plugin.c @@ -32,6 +32,8 @@ static int driver_request(neu_plugin_t *plugin, neu_reqresp_head_t *head, static int driver_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group); static int driver_validate_tag(neu_plugin_t *plugin, neu_datatag_t *tag); +static int driver_write(neu_plugin_t *plugin, void *req, neu_datatag_t *tag, + neu_value_u value); static const neu_plugin_intf_funs_t plugin_intf_funs = { .open = driver_open, @@ -45,6 +47,7 @@ static const neu_plugin_intf_funs_t plugin_intf_funs = { .driver.validate_tag = driver_validate_tag, .driver.group_timer = driver_group_timer, + .driver.write_tag = driver_write, }; const neu_plugin_module_t neu_plugin_module = { @@ -134,10 +137,6 @@ static int driver_request(neu_plugin_t *plugin, neu_reqresp_head_t *head, static int driver_validate_tag(neu_plugin_t *plugin, neu_datatag_t *tag) { - if ((tag->attribute & NEU_ATTRIBUTE_WRITE) == NEU_ATTRIBUTE_WRITE) { - return NEU_ERR_TAG_ATTRIBUTE_NOT_SUPPORT; - } - plog_debug(plugin, "validate tag success, name:%s, address:%s,type:%d ", tag->name, tag->address, tag->type); @@ -148,3 +147,9 @@ static int driver_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group) { return file_group_timer(plugin, group); } + +static int driver_write(neu_plugin_t *plugin, void *req, neu_datatag_t *tag, + neu_value_u value) +{ + return file_write(plugin, req, tag, value); +} diff --git a/plugins/file/file_req.c b/plugins/file/file_req.c index 9d5f4fe7..c35a58aa 100644 --- a/plugins/file/file_req.c +++ b/plugins/file/file_req.c @@ -51,12 +51,6 @@ int file_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group) char * buf = calloc(1, length); neu_dvalue_t dvalue = { 0 }; - if ((tag->attribute & NEU_ATTRIBUTE_WRITE) == NEU_ATTRIBUTE_WRITE) { - dvalue.type = NEU_TYPE_ERROR; - dvalue.value.i32 = NEU_ERR_TAG_ATTRIBUTE_NOT_SUPPORT; - goto dvalue_result; - } - if (stat(tag->address, &st) != 0) { dvalue.type = NEU_TYPE_ERROR; dvalue.value.i32 = NEU_ERR_FILE_NOT_EXIST; @@ -109,4 +103,26 @@ static void plugin_group_free(neu_plugin_group_t *pgp) free(gd->group); free(gd); +} + +int file_write(neu_plugin_t *plugin, void *req, neu_datatag_t *tag, + neu_value_u value) +{ + FILE *fp = fopen(tag->address, "w"); + int ret = 0; + + if (0 == fwrite(value.str, sizeof(char), strlen(value.str), fp)) { + nlog_error("write file failed:%s", tag->address); + ret = NEU_ERR_FILE_WRITE_FAILURE; + goto dvalue_result; + } + + neu_datatag_string_ltoh(value.str, strlen(value.str)); + +dvalue_result: + fclose(fp); + plugin->common.adapter_callbacks->driver.write_response( + plugin->common.adapter, req, ret); + + return 0; } \ No newline at end of file diff --git a/plugins/file/file_req.h b/plugins/file/file_req.h index 0792a242..ffdf34ce 100644 --- a/plugins/file/file_req.h +++ b/plugins/file/file_req.h @@ -31,5 +31,7 @@ struct neu_plugin { }; int file_group_timer(neu_plugin_t *plugin, neu_plugin_group_t *group); +int file_write(neu_plugin_t *plugin, void *req, neu_datatag_t *tag, + neu_value_u value); #endif \ No newline at end of file