Simon South created THRIFT-2709:
-----------------------------------

             Summary: c_glib: Support server implementation
                 Key: THRIFT-2709
                 URL: https://issues.apache.org/jira/browse/THRIFT-2709
             Project: Thrift
          Issue Type: Improvement
          Components: C glib - Compiler, C glib - Library
    Affects Versions: 0.9.1
         Environment: Fedora 20 64-bit on x86_64
            Reporter: Simon South
            Priority: Minor


The attached patches modify the C (GLib) compiler and library to add support 
for implementing servers.

The changes to the compiler include

* Adding server-generation methods
** {{generate_service_helpers}}, which generates a pair of {{ThriftStruct}} 
subclasses for each service method, used to deserialize the method's arguments 
and serialize its result
** {{generate_service_handler}}, which generates an abstract base class for a 
service's handler implementations
** {{generate_service_processor}}, which generates a service's processor class

* Adding helper methods {{underscores_to_initial_caps}} and 
{{property_type_name}} which, respectively, convert an underscore-delimited 
name back to camel case and return the GLib type needed to store a Thrift type 
as a GObject property

Changes to the library include

* Changing the signature of {{ThriftProcessor.process}} so it returns I/O 
errors to its caller

* Adding the {{ThriftDispatchProcessor}} class, ported from the C++ 
implementation, which subclasses {{ThriftProcessor}} and parses an incoming 
method-call message for dispatch by subclasses

* Adding a {{peek}} method to {{ThriftTransport}} and corresponding 
implementations in {{ThriftSocket}}, {{ThriftBufferedTransport}} and 
{{ThriftFramedTransport}}

* Add {{ThriftBufferedTransportFactory}} and {{ThriftFramedTransportFactory}}, 
used by the server to wrap a raw {{ThriftTransport}} in the corresponding 
subtype

* Changing the signature of {{ThriftServer.server}} so it returns an error 
status to its caller, following [GLib's 
conventions|https://developer.gnome.org/glib/2.26/glib-Error-Reporting.html#glib-Error-Reporting.description]

* Changing {{ThriftSimpleServer.serve}} so it
** Detects and reports errors encountered during processing
** Uses transports returned by the transport factories instead of the (raw) 
transport passed in by the caller
** Uses {{ThriftTransport.peek}} to detect the end of input
** Returns an error status to its caller




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to