protobuf 2.2.5-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. data/.gitignore +17 -0
  2. data/.travis.yml +9 -0
  3. data/.yardopts +5 -0
  4. data/Gemfile +3 -0
  5. data/README.md +316 -0
  6. data/Rakefile +29 -0
  7. data/UPGRADING.md +60 -0
  8. data/bin/rpc_server +5 -0
  9. data/bin/rprotoc +62 -0
  10. data/examples/addressbook.pb.rb +55 -0
  11. data/examples/addressbook.proto +24 -0
  12. data/examples/reading_a_message.rb +32 -0
  13. data/examples/writing_a_message.rb +46 -0
  14. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +142 -0
  15. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +318 -0
  16. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +99 -0
  17. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +103 -0
  18. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +85 -0
  19. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +167 -0
  20. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +98 -0
  21. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  22. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +159 -0
  23. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +170 -0
  24. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +102 -0
  25. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +103 -0
  26. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  27. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +104 -0
  28. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +2721 -0
  29. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +303 -0
  30. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +84 -0
  31. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +121 -0
  32. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +77 -0
  33. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +108 -0
  34. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +101 -0
  35. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +72 -0
  36. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +213 -0
  37. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +109 -0
  38. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +134 -0
  39. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +121 -0
  40. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +113 -0
  41. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +120 -0
  42. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +113 -0
  43. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +64 -0
  44. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +434 -0
  45. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +73 -0
  46. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +790 -0
  47. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +156 -0
  48. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +108 -0
  49. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +93 -0
  50. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +1367 -0
  51. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +5223 -0
  52. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +366 -0
  53. data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +136 -0
  54. data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +904 -0
  55. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +424 -0
  56. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +82 -0
  57. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +1102 -0
  58. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h +64 -0
  59. data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +207 -0
  60. data/ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h +54 -0
  61. data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +136 -0
  62. data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +313 -0
  63. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +238 -0
  64. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +357 -0
  65. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +340 -0
  66. data/ext/protobuf-2.4.1/src/google/protobuf/message.h +692 -0
  67. data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +239 -0
  68. data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +64 -0
  69. data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +80 -0
  70. data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +1295 -0
  71. data/ext/protobuf-2.4.1/src/google/protobuf/service.h +291 -0
  72. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +1211 -0
  73. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +220 -0
  74. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +119 -0
  75. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +123 -0
  76. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +121 -0
  77. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +457 -0
  78. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +170 -0
  79. data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +174 -0
  80. data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +101 -0
  81. data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +83 -0
  82. data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +98 -0
  83. data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +285 -0
  84. data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +11915 -0
  85. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +2895 -0
  86. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +211 -0
  87. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +56 -0
  88. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +188 -0
  89. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +151 -0
  90. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +4752 -0
  91. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +150 -0
  92. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +816 -0
  93. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +197 -0
  94. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +403 -0
  95. data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +268 -0
  96. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +304 -0
  97. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +620 -0
  98. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +774 -0
  99. data/ext/ruby_generator/Makefile +10 -0
  100. data/ext/ruby_generator/RubyGenerator.cpp +450 -0
  101. data/ext/ruby_generator/RubyGenerator.h +199 -0
  102. data/ext/ruby_generator/extconf.rb +36 -0
  103. data/ext/ruby_generator/protoc-ruby +0 -0
  104. data/lib/protobuf/cli.rb +188 -0
  105. data/lib/protobuf/enum.rb +58 -0
  106. data/lib/protobuf/enum_value.rb +59 -0
  107. data/lib/protobuf/evented.rb +22 -0
  108. data/lib/protobuf/exceptions.rb +11 -0
  109. data/lib/protobuf/ext/eventmachine.rb +14 -0
  110. data/lib/protobuf/field/base_field.rb +240 -0
  111. data/lib/protobuf/field/bool_field.rb +36 -0
  112. data/lib/protobuf/field/bytes_field.rb +38 -0
  113. data/lib/protobuf/field/double_field.rb +19 -0
  114. data/lib/protobuf/field/enum_field.rb +50 -0
  115. data/lib/protobuf/field/extension_fields.rb +32 -0
  116. data/lib/protobuf/field/field_array.rb +65 -0
  117. data/lib/protobuf/field/fixed32_field.rb +19 -0
  118. data/lib/protobuf/field/fixed64_field.rb +22 -0
  119. data/lib/protobuf/field/float_field.rb +31 -0
  120. data/lib/protobuf/field/int32_field.rb +12 -0
  121. data/lib/protobuf/field/int64_field.rb +12 -0
  122. data/lib/protobuf/field/integer_field.rb +19 -0
  123. data/lib/protobuf/field/message_field.rb +53 -0
  124. data/lib/protobuf/field/sfixed32_field.rb +21 -0
  125. data/lib/protobuf/field/sfixed64_field.rb +24 -0
  126. data/lib/protobuf/field/signed_integer_field.rb +23 -0
  127. data/lib/protobuf/field/sint32_field.rb +12 -0
  128. data/lib/protobuf/field/sint64_field.rb +12 -0
  129. data/lib/protobuf/field/string_field.rb +14 -0
  130. data/lib/protobuf/field/uint32_field.rb +12 -0
  131. data/lib/protobuf/field/uint64_field.rb +12 -0
  132. data/lib/protobuf/field/varint_field.rb +61 -0
  133. data/lib/protobuf/field.rb +57 -0
  134. data/lib/protobuf/logger.rb +86 -0
  135. data/lib/protobuf/message/decoder.rb +83 -0
  136. data/lib/protobuf/message/encoder.rb +48 -0
  137. data/lib/protobuf/message/extend.rb +8 -0
  138. data/lib/protobuf/message/message.rb +1 -0
  139. data/lib/protobuf/message.rb +320 -0
  140. data/lib/protobuf/rpc/buffer.rb +79 -0
  141. data/lib/protobuf/rpc/client.rb +166 -0
  142. data/lib/protobuf/rpc/connector.rb +19 -0
  143. data/lib/protobuf/rpc/connectors/base.rb +38 -0
  144. data/lib/protobuf/rpc/connectors/common.rb +156 -0
  145. data/lib/protobuf/rpc/connectors/em_client.rb +84 -0
  146. data/lib/protobuf/rpc/connectors/eventmachine.rb +87 -0
  147. data/lib/protobuf/rpc/connectors/socket.rb +73 -0
  148. data/lib/protobuf/rpc/connectors/zmq.rb +69 -0
  149. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  150. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  151. data/lib/protobuf/rpc/error.rb +25 -0
  152. data/lib/protobuf/rpc/rpc.pb.rb +118 -0
  153. data/lib/protobuf/rpc/server.rb +89 -0
  154. data/lib/protobuf/rpc/servers/evented/server.rb +41 -0
  155. data/lib/protobuf/rpc/servers/evented_runner.rb +21 -0
  156. data/lib/protobuf/rpc/servers/socket/server.rb +111 -0
  157. data/lib/protobuf/rpc/servers/socket/worker.rb +66 -0
  158. data/lib/protobuf/rpc/servers/socket_runner.rb +27 -0
  159. data/lib/protobuf/rpc/servers/zmq/broker.rb +87 -0
  160. data/lib/protobuf/rpc/servers/zmq/server.rb +50 -0
  161. data/lib/protobuf/rpc/servers/zmq/util.rb +27 -0
  162. data/lib/protobuf/rpc/servers/zmq/worker.rb +60 -0
  163. data/lib/protobuf/rpc/servers/zmq_runner.rb +25 -0
  164. data/lib/protobuf/rpc/service.rb +173 -0
  165. data/lib/protobuf/rpc/service_dispatcher.rb +130 -0
  166. data/lib/protobuf/rpc/service_filters.rb +267 -0
  167. data/lib/protobuf/rpc/stat.rb +83 -0
  168. data/lib/protobuf/socket.rb +22 -0
  169. data/lib/protobuf/version.rb +4 -0
  170. data/lib/protobuf/wire_type.rb +10 -0
  171. data/lib/protobuf/zmq.rb +21 -0
  172. data/lib/protobuf.rb +86 -0
  173. data/proto/rpc.pb.rb +48 -0
  174. data/proto/rpc.proto +73 -0
  175. data/protobuf.gemspec +44 -0
  176. data/spec/benchmark/tasks.rb +179 -0
  177. data/spec/functional/embedded_service_spec.rb +7 -0
  178. data/spec/functional/evented_server_spec.rb +64 -0
  179. data/spec/functional/socket_server_spec.rb +58 -0
  180. data/spec/functional/zmq_server_spec.rb +58 -0
  181. data/spec/lib/protobuf/cli_spec.rb +212 -0
  182. data/spec/lib/protobuf/enum_spec.rb +98 -0
  183. data/spec/lib/protobuf/enum_value_spec.rb +15 -0
  184. data/spec/lib/protobuf/logger_spec.rb +131 -0
  185. data/spec/lib/protobuf/message/encoder_spec.rb +19 -0
  186. data/spec/lib/protobuf/message_spec.rb +209 -0
  187. data/spec/lib/protobuf/rpc/client_spec.rb +158 -0
  188. data/spec/lib/protobuf/rpc/connector_spec.rb +32 -0
  189. data/spec/lib/protobuf/rpc/connectors/base_spec.rb +50 -0
  190. data/spec/lib/protobuf/rpc/connectors/common_spec.rb +128 -0
  191. data/spec/lib/protobuf/rpc/connectors/socket_spec.rb +36 -0
  192. data/spec/lib/protobuf/rpc/connectors/zmq_spec.rb +22 -0
  193. data/spec/lib/protobuf/rpc/servers/evented_server_spec.rb +18 -0
  194. data/spec/lib/protobuf/rpc/servers/socket_server_spec.rb +43 -0
  195. data/spec/lib/protobuf/rpc/servers/zmq/broker_spec.rb +35 -0
  196. data/spec/lib/protobuf/rpc/servers/zmq/server_spec.rb +41 -0
  197. data/spec/lib/protobuf/rpc/servers/zmq/util_spec.rb +45 -0
  198. data/spec/lib/protobuf/rpc/servers/zmq/worker_spec.rb +44 -0
  199. data/spec/lib/protobuf/rpc/service_dispatcher_spec.rb +116 -0
  200. data/spec/lib/protobuf/rpc/service_filters_spec.rb +451 -0
  201. data/spec/lib/protobuf/rpc/service_spec.rb +165 -0
  202. data/spec/lib/protobuf_spec.rb +62 -0
  203. data/spec/spec_helper.rb +51 -0
  204. data/spec/support/all.rb +6 -0
  205. data/spec/support/server.rb +101 -0
  206. data/spec/support/test/enum.pb.rb +34 -0
  207. data/spec/support/test/enum.proto +12 -0
  208. data/spec/support/test/resource.pb.rb +58 -0
  209. data/spec/support/test/resource.proto +31 -0
  210. data/spec/support/test/resource_service.rb +14 -0
  211. data/spec/support/test_app_file.rb +2 -0
  212. data/spec/support/tolerance_matcher.rb +40 -0
  213. data/test/data/data.bin +3 -0
  214. data/test/data/data_source.py +14 -0
  215. data/test/data/types.bin +0 -0
  216. data/test/data/types_source.py +22 -0
  217. data/test/data/unk.png +0 -0
  218. data/test/proto/addressbook.pb.rb +66 -0
  219. data/test/proto/addressbook.proto +33 -0
  220. data/test/proto/addressbook_base.pb.rb +58 -0
  221. data/test/proto/addressbook_base.proto +26 -0
  222. data/test/proto/addressbook_ext.pb.rb +20 -0
  223. data/test/proto/addressbook_ext.proto +6 -0
  224. data/test/proto/collision.pb.rb +17 -0
  225. data/test/proto/collision.proto +5 -0
  226. data/test/proto/ext_collision.pb.rb +24 -0
  227. data/test/proto/ext_collision.proto +8 -0
  228. data/test/proto/ext_range.pb.rb +22 -0
  229. data/test/proto/ext_range.proto +7 -0
  230. data/test/proto/float_default.proto +10 -0
  231. data/test/proto/lowercase.pb.rb +30 -0
  232. data/test/proto/lowercase.proto +9 -0
  233. data/test/proto/merge.pb.rb +39 -0
  234. data/test/proto/merge.proto +15 -0
  235. data/test/proto/nested.pb.rb +30 -0
  236. data/test/proto/nested.proto +9 -0
  237. data/test/proto/optional_field.pb.rb +35 -0
  238. data/test/proto/optional_field.proto +12 -0
  239. data/test/proto/packed.pb.rb +22 -0
  240. data/test/proto/packed.proto +6 -0
  241. data/test/proto/rpc.proto +6 -0
  242. data/test/proto/types.pb.rb +84 -0
  243. data/test/proto/types.proto +37 -0
  244. data/test/test_addressbook.rb +56 -0
  245. data/test/test_enum_value.rb +41 -0
  246. data/test/test_extension.rb +36 -0
  247. data/test/test_lowercase.rb +11 -0
  248. data/test/test_message.rb +128 -0
  249. data/test/test_optional_field.rb +103 -0
  250. data/test/test_packed_field.rb +40 -0
  251. data/test/test_parse.rb +15 -0
  252. data/test/test_repeated_types.rb +132 -0
  253. data/test/test_serialize.rb +61 -0
  254. data/test/test_standard_message.rb +96 -0
  255. data/test/test_types.rb +226 -0
  256. metadata +461 -0
@@ -0,0 +1,291 @@
1
+ // Protocol Buffers - Google's data interchange format
2
+ // Copyright 2008 Google Inc. All rights reserved.
3
+ // http://code.google.com/p/protobuf/
4
+ //
5
+ // Redistribution and use in source and binary forms, with or without
6
+ // modification, are permitted provided that the following conditions are
7
+ // met:
8
+ //
9
+ // * Redistributions of source code must retain the above copyright
10
+ // notice, this list of conditions and the following disclaimer.
11
+ // * Redistributions in binary form must reproduce the above
12
+ // copyright notice, this list of conditions and the following disclaimer
13
+ // in the documentation and/or other materials provided with the
14
+ // distribution.
15
+ // * Neither the name of Google Inc. nor the names of its
16
+ // contributors may be used to endorse or promote products derived from
17
+ // this software without specific prior written permission.
18
+ //
19
+ // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
+ // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
+ // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22
+ // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23
+ // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
+ // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25
+ // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26
+ // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27
+ // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
+ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ // Author: kenton@google.com (Kenton Varda)
32
+ // Based on original Protocol Buffers design by
33
+ // Sanjay Ghemawat, Jeff Dean, and others.
34
+ //
35
+ // DEPRECATED: This module declares the abstract interfaces underlying proto2
36
+ // RPC services. These are intented to be independent of any particular RPC
37
+ // implementation, so that proto2 services can be used on top of a variety
38
+ // of implementations. Starting with version 2.3.0, RPC implementations should
39
+ // not try to build on these, but should instead provide code generator plugins
40
+ // which generate code specific to the particular RPC implementation. This way
41
+ // the generated code can be more appropriate for the implementation in use
42
+ // and can avoid unnecessary layers of indirection.
43
+ //
44
+ //
45
+ // When you use the protocol compiler to compile a service definition, it
46
+ // generates two classes: An abstract interface for the service (with
47
+ // methods matching the service definition) and a "stub" implementation.
48
+ // A stub is just a type-safe wrapper around an RpcChannel which emulates a
49
+ // local implementation of the service.
50
+ //
51
+ // For example, the service definition:
52
+ // service MyService {
53
+ // rpc Foo(MyRequest) returns(MyResponse);
54
+ // }
55
+ // will generate abstract interface "MyService" and class "MyService::Stub".
56
+ // You could implement a MyService as follows:
57
+ // class MyServiceImpl : public MyService {
58
+ // public:
59
+ // MyServiceImpl() {}
60
+ // ~MyServiceImpl() {}
61
+ //
62
+ // // implements MyService ---------------------------------------
63
+ //
64
+ // void Foo(google::protobuf::RpcController* controller,
65
+ // const MyRequest* request,
66
+ // MyResponse* response,
67
+ // Closure* done) {
68
+ // // ... read request and fill in response ...
69
+ // done->Run();
70
+ // }
71
+ // };
72
+ // You would then register an instance of MyServiceImpl with your RPC server
73
+ // implementation. (How to do that depends on the implementation.)
74
+ //
75
+ // To call a remote MyServiceImpl, first you need an RpcChannel connected to it.
76
+ // How to construct a channel depends, again, on your RPC implementation.
77
+ // Here we use a hypothentical "MyRpcChannel" as an example:
78
+ // MyRpcChannel channel("rpc:hostname:1234/myservice");
79
+ // MyRpcController controller;
80
+ // MyServiceImpl::Stub stub(&channel);
81
+ // FooRequest request;
82
+ // FooRespnose response;
83
+ //
84
+ // // ... fill in request ...
85
+ //
86
+ // stub.Foo(&controller, request, &response, NewCallback(HandleResponse));
87
+ //
88
+ // On Thread-Safety:
89
+ //
90
+ // Different RPC implementations may make different guarantees about what
91
+ // threads they may run callbacks on, and what threads the application is
92
+ // allowed to use to call the RPC system. Portable software should be ready
93
+ // for callbacks to be called on any thread, but should not try to call the
94
+ // RPC system from any thread except for the ones on which it received the
95
+ // callbacks. Realistically, though, simple software will probably want to
96
+ // use a single-threaded RPC system while high-end software will want to
97
+ // use multiple threads. RPC implementations should provide multiple
98
+ // choices.
99
+
100
+ #ifndef GOOGLE_PROTOBUF_SERVICE_H__
101
+ #define GOOGLE_PROTOBUF_SERVICE_H__
102
+
103
+ #include <string>
104
+ #include <google/protobuf/stubs/common.h>
105
+
106
+ namespace google {
107
+ namespace protobuf {
108
+
109
+ // Defined in this file.
110
+ class Service;
111
+ class RpcController;
112
+ class RpcChannel;
113
+
114
+ // Defined in other files.
115
+ class Descriptor; // descriptor.h
116
+ class ServiceDescriptor; // descriptor.h
117
+ class MethodDescriptor; // descriptor.h
118
+ class Message; // message.h
119
+
120
+ // Abstract base interface for protocol-buffer-based RPC services. Services
121
+ // themselves are abstract interfaces (implemented either by servers or as
122
+ // stubs), but they subclass this base interface. The methods of this
123
+ // interface can be used to call the methods of the Service without knowing
124
+ // its exact type at compile time (analogous to Reflection).
125
+ class LIBPROTOBUF_EXPORT Service {
126
+ public:
127
+ inline Service() {}
128
+ virtual ~Service();
129
+
130
+ // When constructing a stub, you may pass STUB_OWNS_CHANNEL as the second
131
+ // parameter to the constructor to tell it to delete its RpcChannel when
132
+ // destroyed.
133
+ enum ChannelOwnership {
134
+ STUB_OWNS_CHANNEL,
135
+ STUB_DOESNT_OWN_CHANNEL
136
+ };
137
+
138
+ // Get the ServiceDescriptor describing this service and its methods.
139
+ virtual const ServiceDescriptor* GetDescriptor() = 0;
140
+
141
+ // Call a method of the service specified by MethodDescriptor. This is
142
+ // normally implemented as a simple switch() that calls the standard
143
+ // definitions of the service's methods.
144
+ //
145
+ // Preconditions:
146
+ // * method->service() == GetDescriptor()
147
+ // * request and response are of the exact same classes as the objects
148
+ // returned by GetRequestPrototype(method) and
149
+ // GetResponsePrototype(method).
150
+ // * After the call has started, the request must not be modified and the
151
+ // response must not be accessed at all until "done" is called.
152
+ // * "controller" is of the correct type for the RPC implementation being
153
+ // used by this Service. For stubs, the "correct type" depends on the
154
+ // RpcChannel which the stub is using. Server-side Service
155
+ // implementations are expected to accept whatever type of RpcController
156
+ // the server-side RPC implementation uses.
157
+ //
158
+ // Postconditions:
159
+ // * "done" will be called when the method is complete. This may be
160
+ // before CallMethod() returns or it may be at some point in the future.
161
+ // * If the RPC succeeded, "response" contains the response returned by
162
+ // the server.
163
+ // * If the RPC failed, "response"'s contents are undefined. The
164
+ // RpcController can be queried to determine if an error occurred and
165
+ // possibly to get more information about the error.
166
+ virtual void CallMethod(const MethodDescriptor* method,
167
+ RpcController* controller,
168
+ const Message* request,
169
+ Message* response,
170
+ Closure* done) = 0;
171
+
172
+ // CallMethod() requires that the request and response passed in are of a
173
+ // particular subclass of Message. GetRequestPrototype() and
174
+ // GetResponsePrototype() get the default instances of these required types.
175
+ // You can then call Message::New() on these instances to construct mutable
176
+ // objects which you can then pass to CallMethod().
177
+ //
178
+ // Example:
179
+ // const MethodDescriptor* method =
180
+ // service->GetDescriptor()->FindMethodByName("Foo");
181
+ // Message* request = stub->GetRequestPrototype (method)->New();
182
+ // Message* response = stub->GetResponsePrototype(method)->New();
183
+ // request->ParseFromString(input);
184
+ // service->CallMethod(method, *request, response, callback);
185
+ virtual const Message& GetRequestPrototype(
186
+ const MethodDescriptor* method) const = 0;
187
+ virtual const Message& GetResponsePrototype(
188
+ const MethodDescriptor* method) const = 0;
189
+
190
+ private:
191
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Service);
192
+ };
193
+
194
+ // An RpcController mediates a single method call. The primary purpose of
195
+ // the controller is to provide a way to manipulate settings specific to the
196
+ // RPC implementation and to find out about RPC-level errors.
197
+ //
198
+ // The methods provided by the RpcController interface are intended to be a
199
+ // "least common denominator" set of features which we expect all
200
+ // implementations to support. Specific implementations may provide more
201
+ // advanced features (e.g. deadline propagation).
202
+ class LIBPROTOBUF_EXPORT RpcController {
203
+ public:
204
+ inline RpcController() {}
205
+ virtual ~RpcController();
206
+
207
+ // Client-side methods ---------------------------------------------
208
+ // These calls may be made from the client side only. Their results
209
+ // are undefined on the server side (may crash).
210
+
211
+ // Resets the RpcController to its initial state so that it may be reused in
212
+ // a new call. Must not be called while an RPC is in progress.
213
+ virtual void Reset() = 0;
214
+
215
+ // After a call has finished, returns true if the call failed. The possible
216
+ // reasons for failure depend on the RPC implementation. Failed() must not
217
+ // be called before a call has finished. If Failed() returns true, the
218
+ // contents of the response message are undefined.
219
+ virtual bool Failed() const = 0;
220
+
221
+ // If Failed() is true, returns a human-readable description of the error.
222
+ virtual string ErrorText() const = 0;
223
+
224
+ // Advises the RPC system that the caller desires that the RPC call be
225
+ // canceled. The RPC system may cancel it immediately, may wait awhile and
226
+ // then cancel it, or may not even cancel the call at all. If the call is
227
+ // canceled, the "done" callback will still be called and the RpcController
228
+ // will indicate that the call failed at that time.
229
+ virtual void StartCancel() = 0;
230
+
231
+ // Server-side methods ---------------------------------------------
232
+ // These calls may be made from the server side only. Their results
233
+ // are undefined on the client side (may crash).
234
+
235
+ // Causes Failed() to return true on the client side. "reason" will be
236
+ // incorporated into the message returned by ErrorText(). If you find
237
+ // you need to return machine-readable information about failures, you
238
+ // should incorporate it into your response protocol buffer and should
239
+ // NOT call SetFailed().
240
+ virtual void SetFailed(const string& reason) = 0;
241
+
242
+ // If true, indicates that the client canceled the RPC, so the server may
243
+ // as well give up on replying to it. The server should still call the
244
+ // final "done" callback.
245
+ virtual bool IsCanceled() const = 0;
246
+
247
+ // Asks that the given callback be called when the RPC is canceled. The
248
+ // callback will always be called exactly once. If the RPC completes without
249
+ // being canceled, the callback will be called after completion. If the RPC
250
+ // has already been canceled when NotifyOnCancel() is called, the callback
251
+ // will be called immediately.
252
+ //
253
+ // NotifyOnCancel() must be called no more than once per request.
254
+ virtual void NotifyOnCancel(Closure* callback) = 0;
255
+
256
+ private:
257
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RpcController);
258
+ };
259
+
260
+ // Abstract interface for an RPC channel. An RpcChannel represents a
261
+ // communication line to a Service which can be used to call that Service's
262
+ // methods. The Service may be running on another machine. Normally, you
263
+ // should not call an RpcChannel directly, but instead construct a stub Service
264
+ // wrapping it. Example:
265
+ // RpcChannel* channel = new MyRpcChannel("remotehost.example.com:1234");
266
+ // MyService* service = new MyService::Stub(channel);
267
+ // service->MyMethod(request, &response, callback);
268
+ class LIBPROTOBUF_EXPORT RpcChannel {
269
+ public:
270
+ inline RpcChannel() {}
271
+ virtual ~RpcChannel();
272
+
273
+ // Call the given method of the remote service. The signature of this
274
+ // procedure looks the same as Service::CallMethod(), but the requirements
275
+ // are less strict in one important way: the request and response objects
276
+ // need not be of any specific class as long as their descriptors are
277
+ // method->input_type() and method->output_type().
278
+ virtual void CallMethod(const MethodDescriptor* method,
279
+ RpcController* controller,
280
+ const Message* request,
281
+ Message* response,
282
+ Closure* done) = 0;
283
+
284
+ private:
285
+ GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(RpcChannel);
286
+ };
287
+
288
+ } // namespace protobuf
289
+
290
+ } // namespace google
291
+ #endif // GOOGLE_PROTOBUF_SERVICE_H__