#include "rpc_server.h" #include "rpc_base.h" #include "rpc_dispatcher.h" static bool login(FILE *file) { LoginRequest request = {0}; request.has_im_rpc_server = true; request.im_rpc_server = true; rpc_ostream_t output = {}; output.file = file; rpc_result_t status = rpc_sendpacket(&output, RPCCommand_Login, LoginRequest_fields, &request); if (status != RPC_OK) return false; rpc_istream_t input = {}; input.file = file; LoginResponse response = {}; if (!rpc_istream_start(&input) || input.msgtype != RPCCommand_Login) return false; if (!pb_decode(&input.stream, LoginResponse_fields, &response)) return false; return rpc_istream_end(&input); } void rpc_chat(FILE *file) { if (!login(file)) return; for(;;) { rpc_istream_t input = {}; rpc_ostream_t output = {}; input.file = output.file = file; if (!rpc_dispatch(&input, &output)) return; } }