Example #1
0
gboolean
thrift_server_transport_listen (ThriftServerTransport *transport,
                                GError **error)
{
    return THRIFT_SERVER_TRANSPORT_GET_CLASS (transport)->listen (transport,
            error);
}
Example #2
0
ThriftTransport *
thrift_server_transport_accept (ThriftServerTransport *transport,
                                GError **error)
{
    return THRIFT_SERVER_TRANSPORT_GET_CLASS (transport)->accept (transport,
            error);
}
Example #3
0
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); 
}