On Wed, Mar 10, 2010 at 8:50 PM, Kenton Varda <ken...@google.com> wrote:

> Note that to write your plugin, you do *not* have to copy the CppGenerator
> sources.  Instead, write your plugin to use
> output_directory->OpenForInsert() to insert additional code into what the
> C++ code generator already generated.  Specifically, you want to insert at
> the "namespace_scope" insertion point, documented here:
>
>
> http://code.google.com/apis/protocolbuffers/docs/reference/cpp-generated.html#plugins
>
> Then you would invoke protoc like:
>
>   protoc --cpp_out=dir --my_plugin_out=dir foo.proto
>
> The C++ generator will be executed first, then your plugin.  Since they
> have the same output location, your plugin can insert into the code
> generated by the C++ code generator.
>
> This is working pretty well - with one exception :

My simple test_service.proto has a pair of messages (Request, Response) and
a single service that takes one and returns the other.

A 'generic' services cpp output includes a global const pointer for the
ServiceDescriptor and a  call to initialize that pointer in the 'AssignDesc'
generated method. If I turn off the generic output those two calls aren't
output - but I'd rather like them to be since it gives me a global instance
of the descriptor that I (expect) will help with 'discovery' and
'registration' in the server side of the RPC.

There doesn't seem to be a handy insertion point already present in the file
that I can use to inject my output, am I missing something ? Should I file a
bug ?

As a workaround I can introduce my own initializer to initialize these
pieces but I still don't see a way to get it to be called from the
GoogleOnceInit() call in $file$_AssignDescriptorsOnce() method.

I guess a third alternative would be to have my plugin generated
implementation of the Service subclass' descriptor() and GetDescriptor()
method just do the one time initialization of the global prior to returning
it ? Perhaps this is the best approach ?

Andrew 8-)

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to proto...@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to