* @brief JSON-RPC server with callback-based I/O * * Coordinates JSON-RPC request/response flow between source and sink callbacks. * Provides generic I/O coordination layer for JSON-RPC servers. * * Usage: * Server server( * []() { return getJsonRpcRequest(); }, // RequestSource * [](const json& r) { sendJsonRpcResponse(r); } // ResponseSink * ); * server.setReques
| 25 | * server.update(); // pull + push |
| 26 | */ |
| 27 | class Server { |
| 28 | public: |
| 29 | using RequestSource = fl::function<fl::optional<fl::json>()>; |
| 30 | using ResponseSink = fl::function<void(const fl::json&)>; |
| 31 | using RequestHandler = fl::function<fl::json(const fl::json&)>; |
| 32 | |
| 33 | /** |
| 34 | * @brief Default constructor |
| 35 | * |
| 36 | * Creates Server with no-op callbacks. Use setRequestSource/setResponseSink |
| 37 | * to configure I/O, or call setRequestHandler() manually. |
| 38 | */ |
| 39 | Server() FL_NOEXCEPT; |
| 40 | |
| 41 | /** |
| 42 | * @brief Construct with I/O callbacks |
| 43 | * @param source Function that returns next JSON-RPC request (or nullopt if none) |
| 44 | * @param sink Function that handles outgoing JSON-RPC responses |
| 45 | */ |
| 46 | Server(RequestSource source, ResponseSink sink); |
| 47 | |
| 48 | virtual ~Server() FL_NOEXCEPT = default; |
| 49 | |
| 50 | // Non-copyable but movable |
| 51 | Server(const Server&) FL_NOEXCEPT = delete; |
| 52 | Server& operator=(const Server&) FL_NOEXCEPT = delete; |
| 53 | Server(Server&&) FL_NOEXCEPT = default; |
| 54 | Server& operator=(Server&&) FL_NOEXCEPT = default; |
| 55 | |
| 56 | /** |
| 57 | * @brief Set request handler |
| 58 | * @param handler Function that processes JSON-RPC requests and returns responses |
| 59 | */ |
| 60 | void setRequestHandler(RequestHandler handler); |
| 61 | |
| 62 | /** |
| 63 | * @brief Set request source callback |
| 64 | */ |
| 65 | void setRequestSource(RequestSource source); |
| 66 | |
| 67 | /** |
| 68 | * @brief Set response sink callback |
| 69 | */ |
| 70 | void setResponseSink(ResponseSink sink); |
| 71 | |
| 72 | /** |
| 73 | * @brief Main update: pull + push |
| 74 | */ |
| 75 | size_t update(); |
| 76 | |
| 77 | /** |
| 78 | * @brief Pull requests from source, process, queue responses |
| 79 | */ |
| 80 | size_t pull(); |
| 81 | |
| 82 | /** |
| 83 | * @brief Push queued responses to sink |
| 84 | */ |