gboolean thrift_server_transport_listen (ThriftServerTransport *transport, GError **error) { return THRIFT_SERVER_TRANSPORT_GET_CLASS (transport)->listen (transport, error); }
ThriftTransport * thrift_server_transport_accept (ThriftServerTransport *transport, GError **error) { return THRIFT_SERVER_TRANSPORT_GET_CLASS (transport)->accept (transport, error); }
void thrift_simple_server_serve (ThriftServer *server) { g_return_if_fail (THRIFT_IS_SIMPLE_SERVER (server)); ThriftTransport *t = NULL; ThriftTransport *input_transport = NULL, *output_transport = NULL; ThriftProtocol *input_protocol = NULL, *output_protocol = NULL; ThriftSimpleServer *tss = THRIFT_SIMPLE_SERVER(server); THRIFT_SERVER_TRANSPORT_GET_CLASS (server->server_transport) ->listen (server->server_transport, NULL); tss->running = TRUE; while (tss->running == TRUE) { t = thrift_server_transport_accept (server->server_transport, NULL); input_transport = THRIFT_TRANSPORT_FACTORY_GET_CLASS (server->input_transport_factory) ->get_transport (server->input_transport_factory, t); output_transport = THRIFT_TRANSPORT_FACTORY_GET_CLASS (server->output_transport_factory) ->get_transport (server->output_transport_factory, t); input_protocol = THRIFT_PROTOCOL_FACTORY_GET_CLASS (server->input_protocol_factory) ->get_protocol (server->input_protocol_factory, t); output_protocol = THRIFT_PROTOCOL_FACTORY_GET_CLASS (server->output_protocol_factory) ->get_protocol (server->output_protocol_factory, t); while (THRIFT_PROCESSOR_GET_CLASS (server->processor) ->process (server->processor, input_protocol, output_protocol)) { // TODO: implement transport peek () } // TODO: handle exceptions THRIFT_TRANSPORT_GET_CLASS (input_transport)->close (input_transport, NULL); THRIFT_TRANSPORT_GET_CLASS (output_transport)->close (output_transport, NULL); } // attempt to shutdown THRIFT_SERVER_TRANSPORT_GET_CLASS (server->server_transport) ->close (server->server_transport, NULL); }