aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/worker.c
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2023-07-17 23:03:59 +0200
committerEgor Tensin <Egor.Tensin@gmail.com>2023-07-18 00:38:50 +0200
commite05f02acd583797ceb449fc501d371d45a4293c1 (patch)
tree491322cf633b67918f0361c1ce986f6b690844bc /src/worker.c
parentdocker: sanitize package dependencies (diff)
downloadcimple-e05f02acd583797ceb449fc501d371d45a4293c1.tar.gz
cimple-e05f02acd583797ceb449fc501d371d45a4293c1.zip
switch to JSON-RPC as message format
Instead of the weird `struct msg` I had, I switched to the JSON-RPC format. It's basically the same, but has a well-defined semantics in case of errors.
Diffstat (limited to 'src/worker.c')
-rw-r--r--src/worker.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/src/worker.c b/src/worker.c
index e45bfba..a6ccc89 100644
--- a/src/worker.c
+++ b/src/worker.c
@@ -13,7 +13,6 @@
#include "event_loop.h"
#include "git.h"
#include "log.h"
-#include "msg.h"
#include "net.h"
#include "process.h"
#include "protocol.h"
@@ -83,14 +82,14 @@ static int worker_set_stopping(UNUSED struct event_loop *loop, UNUSED int fd, UN
return 0;
}
-static int worker_handle_cmd_start(const struct msg *request, UNUSED struct msg **response,
- void *_ctx)
+static int worker_handle_cmd_start(const struct jsonrpc_request *request,
+ UNUSED struct jsonrpc_response **response, void *_ctx)
{
struct cmd_conn_ctx *ctx = (struct cmd_conn_ctx *)_ctx;
struct worker *worker = (struct worker *)ctx->arg;
int ret = 0;
- ret = msg_start_parse(request, &worker->run);
+ ret = start_request_parse(request, &worker->run);
if (ret < 0)
return ret;
@@ -193,19 +192,26 @@ static int worker_do_run(struct worker *worker)
proc_output_dump(result);
- struct msg *finished_msg = NULL;
+ struct jsonrpc_request *finished_request = NULL;
- ret = msg_finished_create(&finished_msg, run_get_id(worker->run), result);
+ ret = finished_request_create(&finished_request, run_get_id(worker->run), result);
if (ret < 0)
goto free_output;
- ret = msg_connect_and_talk(worker->settings->host, worker->settings->port, finished_msg,
- NULL);
+ ret = net_connect(worker->settings->host, worker->settings->port);
+ if (ret < 0)
+ goto free_request;
+ int fd = ret;
+
+ ret = jsonrpc_request_send(finished_request, fd);
if (ret < 0)
- goto free_finished_msg;
+ goto close_conn;
-free_finished_msg:
- msg_free(finished_msg);
+close_conn:
+ net_close(fd);
+
+free_request:
+ jsonrpc_request_destroy(finished_request);
free_output:
proc_output_destroy(result);
@@ -224,14 +230,13 @@ static int worker_get_run(struct worker *worker)
return ret;
fd = ret;
- struct msg *new_worker_msg = NULL;
-
- ret = msg_new_worker_create(&new_worker_msg);
+ struct jsonrpc_request *new_worker_request = NULL;
+ ret = new_worker_request_create(&new_worker_request);
if (ret < 0)
goto close;
- ret = msg_send(fd, new_worker_msg);
- msg_free(new_worker_msg);
+ ret = jsonrpc_request_send(new_worker_request, fd);
+ jsonrpc_request_destroy(new_worker_request);
if (ret < 0)
goto close;