/* * 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