/* * Copyright (c) 2023 Egor Tensin * This file is part of the "cimple" project. * For details, see https://github.com/egor-tensin/cimple. * Distributed under the MIT License. */ #ifndef __COMMAND_H__ #define __COMMAND_H__ #include "event_loop.h" #include "json_rpc.h" #include typedef int (*cmd_handler)(const struct jsonrpc_request* request, struct jsonrpc_response** response, void* ctx); struct cmd_desc { char* name; cmd_handler handler; }; struct cmd_dispatcher; int cmd_dispatcher_create(struct cmd_dispatcher**, struct cmd_desc*, size_t numof_defs, void* ctx); void cmd_dispatcher_destroy(struct cmd_dispatcher*); int cmd_dispatcher_handle(const struct cmd_dispatcher*, const struct jsonrpc_request* command, struct jsonrpc_response** response); struct cmd_conn_ctx { int fd; void* arg; }; /* This is supposed to be used as an argument to tcp_server_accept. */ int cmd_dispatcher_handle_conn(int conn_fd, void* dispatcher); /* This is supposed to be used as an argument to event_loop_add. */ int cmd_dispatcher_handle_event(struct event_loop*, int fd, short revents, void* arg); #endif