summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZheng Chao <[email protected]>2022-11-22 17:52:35 +0800
committerZheng Chao <[email protected]>2022-11-22 17:52:35 +0800
commit704c1d22adf1e3b446fc144dd67e42aa598baa72 (patch)
treea0669db7456c208d98bae38413b729067ae807e2 /src
parent8576db78045570f27e7bf862fbd3056d22994548 (diff)
:recycle: Rename Async API. Add async example.
Diffstat (limited to 'src')
-rw-r--r--src/swarmkv_api.c56
1 files changed, 39 insertions, 17 deletions
diff --git a/src/swarmkv_api.c b/src/swarmkv_api.c
index 5577ef3..25a7c3b 100644
--- a/src/swarmkv_api.c
+++ b/src/swarmkv_api.c
@@ -357,43 +357,65 @@ struct swarmkv_reply *swarmkv_command(struct swarmkv *db,const char *format, ...
return reply;
}
-void swarmkv_command_async(struct swarmkv *db, swarmkv_on_reply_callback_t * cb, void *cb_arg, const char *target, const char *format, ...)
+void swarmkv_async_command_on_argv(struct swarmkv *db, swarmkv_on_reply_callback_t * cb, void *cb_arg, const char *target, int argc, sds *argv)
{
- int argc=0; sds *argv=NULL;
- char *cmd_str=NULL;
- node_t target_node;
- memset(&target_node, 0, sizeof(node_t));
-
- va_list ap;
- va_start(ap,format);
- vasprintf(&cmd_str, format, ap);
- va_end(ap);
-
- argv=sdssplitargs(cmd_str, &argc);
-
- struct swarmkv_cmd *cmd=NULL;
+ struct swarmkv_cmd *cmd=NULL;
cmd=swarmkv_cmd_new(argc);
for(size_t i=0; i<argc; i++)
{
cmd->argv[i]=sdsdup(argv[i]);
}
-
+
if(!target)
{
exec_for_local(db, cmd, NULL, cb, cb_arg);
-
}
else
{
+ node_t target_node;
+ memset(&target_node, 0, sizeof(node_t));
node_init_from_sds(&target_node, target);
exec_for_local(db, cmd, &target_node, cb, cb_arg);
}
+ swarmkv_cmd_free(cmd);
+}
+void swarmkv_async_command_on(struct swarmkv *db, swarmkv_on_reply_callback_t * cb, void *cb_arg, const char *target, const char *format, ...)
+{
+ int argc=0; sds *argv=NULL;
+ char *cmd_str=NULL;
+
+ va_list ap;
+ va_start(ap,format);
+ vasprintf(&cmd_str, format, ap);
+ va_end(ap);
+
+ argv=sdssplitargs(cmd_str, &argc);
+
+ swarmkv_async_command_on_argv(db, cb, cb_arg, target, argc, argv);
if (argv)
{
sdsfreesplitres(argv, argc);
}
free(cmd_str);
- swarmkv_cmd_free(cmd);
}
+void swarmkv_async_command(struct swarmkv *db, swarmkv_on_reply_callback_t * cb, void *cb_arg, const char *format, ...)
+{
+ int argc=0; sds *argv=NULL;
+ char *cmd_str=NULL;
+ va_list ap;
+ va_start(ap,format);
+ vasprintf(&cmd_str, format, ap);
+ va_end(ap);
+
+ argv=sdssplitargs(cmd_str, &argc);
+
+ swarmkv_async_command_on_argv(db, cb, cb_arg, NULL, argc, argv);
+
+ if (argv)
+ {
+ sdsfreesplitres(argv, argc);
+ }
+ free(cmd_str);
+} \ No newline at end of file