protobuf 1.4.2 → 2.0.0.rc1

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 (198) hide show
  1. data/.gitignore +4 -0
  2. data/Rakefile +7 -7
  3. data/bin/rpc_server +2 -188
  4. data/bin/rprotoc +44 -38
  5. data/examples/addressbook.pb.rb +2 -2
  6. data/ext/Makefile +11 -0
  7. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/code_generator.h +142 -0
  8. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/command_line_interface.h +318 -0
  9. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum.h +99 -0
  10. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_enum_field.h +103 -0
  11. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_extension.h +85 -0
  12. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_field.h +167 -0
  13. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_file.h +98 -0
  14. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_generator.h +72 -0
  15. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_helpers.h +159 -0
  16. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message.h +170 -0
  17. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_message_field.h +102 -0
  18. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_primitive_field.h +103 -0
  19. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_service.h +118 -0
  20. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_string_field.h +104 -0
  21. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/cpp/cpp_test_bad_identifiers.pb.h +2721 -0
  22. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/importer.h +303 -0
  23. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum.h +84 -0
  24. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_enum_field.h +121 -0
  25. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_extension.h +77 -0
  26. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_field.h +108 -0
  27. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_file.h +101 -0
  28. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_generator.h +72 -0
  29. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_helpers.h +213 -0
  30. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message.h +109 -0
  31. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_message_field.h +134 -0
  32. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_primitive_field.h +121 -0
  33. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_service.h +113 -0
  34. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/java/java_string_field.h +120 -0
  35. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/mock_code_generator.h +113 -0
  36. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/package_info.h +64 -0
  37. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/parser.h +434 -0
  38. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.h +73 -0
  39. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/plugin.pb.h +790 -0
  40. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/python/python_generator.h +156 -0
  41. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/subprocess.h +108 -0
  42. data/ext/protobuf-2.4.1/src/google/protobuf/compiler/zip_writer.h +93 -0
  43. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.h +1367 -0
  44. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor.pb.h +5223 -0
  45. data/ext/protobuf-2.4.1/src/google/protobuf/descriptor_database.h +366 -0
  46. data/ext/protobuf-2.4.1/src/google/protobuf/dynamic_message.h +136 -0
  47. data/ext/protobuf-2.4.1/src/google/protobuf/extension_set.h +904 -0
  48. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_reflection.h +424 -0
  49. data/ext/protobuf-2.4.1/src/google/protobuf/generated_message_util.h +82 -0
  50. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream.h +1102 -0
  51. data/ext/protobuf-2.4.1/src/google/protobuf/io/coded_stream_inl.h +64 -0
  52. data/ext/protobuf-2.4.1/src/google/protobuf/io/gzip_stream.h +207 -0
  53. data/ext/protobuf-2.4.1/src/google/protobuf/io/package_info.h +54 -0
  54. data/ext/protobuf-2.4.1/src/google/protobuf/io/printer.h +136 -0
  55. data/ext/protobuf-2.4.1/src/google/protobuf/io/tokenizer.h +313 -0
  56. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream.h +238 -0
  57. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl.h +357 -0
  58. data/ext/protobuf-2.4.1/src/google/protobuf/io/zero_copy_stream_impl_lite.h +340 -0
  59. data/ext/protobuf-2.4.1/src/google/protobuf/message.h +692 -0
  60. data/ext/protobuf-2.4.1/src/google/protobuf/message_lite.h +239 -0
  61. data/ext/protobuf-2.4.1/src/google/protobuf/package_info.h +64 -0
  62. data/ext/protobuf-2.4.1/src/google/protobuf/reflection_ops.h +80 -0
  63. data/ext/protobuf-2.4.1/src/google/protobuf/repeated_field.h +1295 -0
  64. data/ext/protobuf-2.4.1/src/google/protobuf/service.h +291 -0
  65. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/common.h +1211 -0
  66. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/hash.h +220 -0
  67. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/map-util.h +119 -0
  68. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/once.h +123 -0
  69. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/stl_util-inl.h +121 -0
  70. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/strutil.h +457 -0
  71. data/ext/protobuf-2.4.1/src/google/protobuf/stubs/substitute.h +170 -0
  72. data/ext/protobuf-2.4.1/src/google/protobuf/test_util.h +174 -0
  73. data/ext/protobuf-2.4.1/src/google/protobuf/test_util_lite.h +101 -0
  74. data/ext/protobuf-2.4.1/src/google/protobuf/testing/file.h +83 -0
  75. data/ext/protobuf-2.4.1/src/google/protobuf/testing/googletest.h +98 -0
  76. data/ext/protobuf-2.4.1/src/google/protobuf/text_format.h +285 -0
  77. data/ext/protobuf-2.4.1/src/google/protobuf/unittest.pb.h +11915 -0
  78. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_custom_options.pb.h +2895 -0
  79. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_embed_optimize_for.pb.h +211 -0
  80. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_empty.pb.h +56 -0
  81. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import.pb.h +188 -0
  82. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_import_lite.pb.h +151 -0
  83. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite.pb.h +4752 -0
  84. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_lite_imports_nonlite.pb.h +150 -0
  85. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_mset.pb.h +816 -0
  86. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_no_generic_services.pb.h +197 -0
  87. data/ext/protobuf-2.4.1/src/google/protobuf/unittest_optimize_for.pb.h +403 -0
  88. data/ext/protobuf-2.4.1/src/google/protobuf/unknown_field_set.h +268 -0
  89. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format.h +304 -0
  90. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite.h +620 -0
  91. data/ext/protobuf-2.4.1/src/google/protobuf/wire_format_lite_inl.h +774 -0
  92. data/ext/ruby_generator/RubyGenerator.cpp +435 -0
  93. data/ext/ruby_generator/RubyGenerator.h +180 -0
  94. data/ext/ruby_generator/extconf.rb +24 -0
  95. data/lib/protobuf.rb +55 -33
  96. data/lib/protobuf/cli.rb +176 -0
  97. data/lib/protobuf/common/logger.rb +11 -11
  98. data/lib/protobuf/{message/enum.rb → enum.rb} +0 -10
  99. data/lib/protobuf/evented.rb +22 -0
  100. data/lib/protobuf/field.rb +57 -0
  101. data/lib/protobuf/field/base_field.rb +210 -0
  102. data/lib/protobuf/field/bool_field.rb +24 -0
  103. data/lib/protobuf/field/bytes_field.rb +38 -0
  104. data/lib/protobuf/field/double_field.rb +19 -0
  105. data/lib/protobuf/field/enum_field.rb +58 -0
  106. data/lib/protobuf/field/extension_fields.rb +24 -0
  107. data/lib/protobuf/field/field_array.rb +55 -0
  108. data/lib/protobuf/field/fixed32_field.rb +19 -0
  109. data/lib/protobuf/field/fixed64_field.rb +22 -0
  110. data/lib/protobuf/field/float_field.rb +29 -0
  111. data/lib/protobuf/field/int32_field.rb +10 -0
  112. data/lib/protobuf/field/int64_field.rb +10 -0
  113. data/lib/protobuf/field/integer_field.rb +19 -0
  114. data/lib/protobuf/field/message_field.rb +51 -0
  115. data/lib/protobuf/field/sfixed32_field.rb +21 -0
  116. data/lib/protobuf/field/sfixed64_field.rb +24 -0
  117. data/lib/protobuf/field/signed_integer_field.rb +23 -0
  118. data/lib/protobuf/field/sint32_field.rb +10 -0
  119. data/lib/protobuf/field/sint64_field.rb +10 -0
  120. data/lib/protobuf/field/string_field.rb +14 -0
  121. data/lib/protobuf/field/uint32_field.rb +10 -0
  122. data/lib/protobuf/field/uint64_field.rb +10 -0
  123. data/lib/protobuf/field/varint_field.rb +63 -0
  124. data/lib/protobuf/message.rb +376 -0
  125. data/lib/protobuf/message/message.rb +1 -475
  126. data/lib/protobuf/rpc/buffer.rb +1 -1
  127. data/lib/protobuf/rpc/client.rb +26 -26
  128. data/lib/protobuf/rpc/connector.rb +15 -14
  129. data/lib/protobuf/rpc/connectors/eventmachine.rb +13 -13
  130. data/lib/protobuf/rpc/rpc.pb.rb +39 -28
  131. data/lib/protobuf/rpc/server.rb +7 -28
  132. data/lib/protobuf/rpc/servers/evented_runner.rb +15 -15
  133. data/lib/protobuf/rpc/servers/socket/server.rb +2 -1
  134. data/lib/protobuf/rpc/servers/socket_runner.rb +5 -6
  135. data/lib/protobuf/rpc/servers/zmq_runner.rb +4 -5
  136. data/lib/protobuf/socket.rb +22 -0
  137. data/lib/protobuf/version.rb +2 -1
  138. data/lib/protobuf/zmq.rb +21 -0
  139. data/proto/rpc.pb.rb +48 -0
  140. data/protobuf.gemspec +14 -6
  141. data/spec/benchmark/tasks.rb +42 -23
  142. data/spec/functional/evented_server_spec.rb +2 -0
  143. data/spec/functional/socket_server_spec.rb +22 -26
  144. data/spec/functional/zmq_server_spec.rb +22 -26
  145. data/spec/lib/protobuf/cli_spec.rb +182 -0
  146. data/spec/{unit → lib/protobuf}/common/logger_spec.rb +0 -0
  147. data/spec/{unit → lib/protobuf/message}/enum_spec.rb +0 -0
  148. data/spec/{unit → lib/protobuf/message}/message_spec.rb +0 -0
  149. data/spec/{unit → lib/protobuf}/rpc/client_spec.rb +6 -4
  150. data/spec/lib/protobuf/rpc/connector_spec.rb +41 -0
  151. data/spec/{unit → lib/protobuf}/rpc/connectors/base_spec.rb +18 -18
  152. data/spec/{unit → lib/protobuf}/rpc/connectors/common_spec.rb +20 -20
  153. data/spec/{unit → lib/protobuf}/rpc/connectors/socket_spec.rb +9 -8
  154. data/spec/{unit → lib/protobuf}/rpc/connectors/zmq_spec.rb +1 -1
  155. data/spec/{unit → lib/protobuf}/rpc/servers/evented_server_spec.rb +4 -4
  156. data/spec/{unit → lib/protobuf}/rpc/servers/socket_server_spec.rb +11 -23
  157. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/broker_spec.rb +5 -0
  158. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/server_spec.rb +5 -0
  159. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/util_spec.rb +5 -0
  160. data/spec/{unit → lib/protobuf}/rpc/servers/zmq/worker_spec.rb +5 -0
  161. data/spec/{unit → lib/protobuf}/rpc/service_spec.rb +0 -0
  162. data/spec/proto/test.pb.rb +48 -25
  163. data/spec/spec_helper.rb +9 -15
  164. data/spec/support/all.rb +7 -0
  165. data/spec/{helper → support}/server.rb +5 -7
  166. data/spec/{helper → support}/silent_constants.rb +4 -0
  167. data/spec/support/test_app_file.rb +2 -0
  168. data/spec/{helper → support}/tolerance_matcher.rb +0 -0
  169. data/test/proto/types.pb.rb +1 -1
  170. data/test/test_addressbook.rb +1 -1
  171. data/test/test_enum_value.rb +1 -1
  172. data/test/test_standard_message.rb +1 -1
  173. metadata +243 -107
  174. data/lib/protobuf/common/util.rb +0 -59
  175. data/lib/protobuf/compiler/compiler.rb +0 -52
  176. data/lib/protobuf/compiler/nodes.rb +0 -323
  177. data/lib/protobuf/compiler/proto.y +0 -216
  178. data/lib/protobuf/compiler/proto2.ebnf +0 -79
  179. data/lib/protobuf/compiler/proto_parser.rb +0 -1425
  180. data/lib/protobuf/compiler/template/rpc_service_implementation.erb +0 -42
  181. data/lib/protobuf/compiler/visitors.rb +0 -282
  182. data/lib/protobuf/descriptor/descriptor.proto +0 -286
  183. data/lib/protobuf/descriptor/descriptor.rb +0 -55
  184. data/lib/protobuf/descriptor/descriptor_builder.rb +0 -143
  185. data/lib/protobuf/descriptor/descriptor_proto.rb +0 -138
  186. data/lib/protobuf/descriptor/enum_descriptor.rb +0 -33
  187. data/lib/protobuf/descriptor/field_descriptor.rb +0 -49
  188. data/lib/protobuf/descriptor/file_descriptor.rb +0 -37
  189. data/lib/protobuf/message/field.rb +0 -684
  190. data/lib/protobuf/message/protoable.rb +0 -38
  191. data/spec/helper/all.rb +0 -7
  192. data/spec/unit/common/util_spec.rb +0 -17
  193. data/spec/unit/rpc/connector_spec.rb +0 -31
  194. data/spec/unit/rpc/connectors/eventmachine_client_spec.rb +0 -32
  195. data/spec/unit/rpc/connectors/eventmachine_spec.rb +0 -0
  196. data/test/check_unbuild.rb +0 -30
  197. data/test/test_compiler.rb +0 -325
  198. data/test/test_descriptor.rb +0 -122
@@ -44,7 +44,7 @@ module Protobuf
44
44
  end
45
45
 
46
46
  def set_data(data)
47
- @data = data.is_a?(Protobuf::Message) ? data.serialize_to_string : data.to_s
47
+ @data = data.is_a?(::Protobuf::Message) ? data.serialize_to_string : data.to_s
48
48
  @size = @data.size
49
49
  end
50
50
 
@@ -9,14 +9,14 @@ module Protobuf
9
9
  class Client
10
10
  extend Forwardable
11
11
  include Protobuf::Logger::LogMethods
12
-
12
+
13
13
  delegate [:options, :complete_cb, :success_cb, :failure_cb, :async?] => :@connector
14
14
  attr_reader :connector
15
-
15
+
16
16
  # Create a new client with default options (defined in ClientConnection)
17
17
  # See Service#client for a more convenient way to create a client, as well
18
18
  # as Client#method_missing defined below.
19
- #
19
+ #
20
20
  # request = WidgetFindRequest.new
21
21
  # client = Client.new({
22
22
  # :service => WidgetService,
@@ -35,33 +35,33 @@ module Protobuf
35
35
  def log_signature
36
36
  @log_signature ||= "client-#{self.class}"
37
37
  end
38
-
39
- # Set a complete callback on the client to return the object (self).
38
+
39
+ # Set a complete callback on the client to return the object (self).
40
40
  # Callback is called regardless of :async setting.
41
- #
41
+ #
42
42
  # client = Client.new(:service => WidgetService)
43
43
  # client.on_complete {|obj| ... }
44
- #
44
+ #
45
45
  def on_complete(&complete_cb)
46
- @connector.complete_cb = complete_cb
46
+ @connector.complete_cb = complete_cb
47
47
  end
48
48
 
49
49
  def on_complete=(callable)
50
50
  if callable != nil && !callable.respond_to?(:call) && callable.arity != 1
51
51
  raise "callable must take a single argument and respond to :call"
52
52
  end
53
-
54
- @connector.complete_cb = callable
53
+
54
+ @connector.complete_cb = callable
55
55
  end
56
-
56
+
57
57
  # Set a failure callback on the client to return the
58
58
  # error returned by the service, if any. If this callback
59
59
  # is called, success_cb will NOT be called.
60
60
  # Callback is called regardless of :async setting.
61
- #
61
+ #
62
62
  # client = Client.new(:service => WidgetService)
63
63
  # client.on_failure {|err| ... }
64
- #
64
+ #
65
65
  def on_failure(&failure_cb)
66
66
  @connector.failure_cb = failure_cb
67
67
  end
@@ -71,17 +71,17 @@ module Protobuf
71
71
  raise "callable must take a single argument and respond to :call"
72
72
  end
73
73
 
74
- @connector.failure_cb = callable
74
+ @connector.failure_cb = callable
75
75
  end
76
-
76
+
77
77
  # Set a success callback on the client to return the
78
78
  # successful response from the service when it is returned.
79
79
  # If this callback is called, failure_cb will NOT be called.
80
80
  # Callback is called regardless of :async setting.
81
- #
81
+ #
82
82
  # client = Client.new(:service => WidgetService)
83
83
  # client.on_success {|res| ... }
84
- #
84
+ #
85
85
  def on_success(&success_cb)
86
86
  @connector.success_cb = success_cb
87
87
  end
@@ -91,9 +91,9 @@ module Protobuf
91
91
  raise "callable must take a single argument and respond to :call"
92
92
  end
93
93
 
94
- @connector.success_cb = callable
94
+ @connector.success_cb = callable
95
95
  end
96
-
96
+
97
97
  # Provides a mechanism to call the service method against the client
98
98
  # which will automatically setup the service_class and method_name
99
99
  # in the wrapper protobuf request.
@@ -105,7 +105,7 @@ module Protobuf
105
105
  # c.on_success {|res| ... }
106
106
  # c.on_failure {|err| ... }
107
107
  # end
108
- #
108
+ #
109
109
  def method_missing(method, *params)
110
110
  service = options[:service]
111
111
  unless service.rpcs[service].keys.include?(method)
@@ -121,7 +121,7 @@ module Protobuf
121
121
  options[:method] = method.to_s
122
122
  options[:request] = params[0].is_a?(Hash) ? options[:request_type].new(params[0]) : params[0]
123
123
  log_debug { "[#{log_signature}] Request Data: %s" % options[:request].inspect }
124
-
124
+
125
125
  # Call client to setup on_success and on_failure event callbacks
126
126
  if block_given?
127
127
  log_debug { "[#{log_signature}] client setup callback given, invoking" }
@@ -129,11 +129,11 @@ module Protobuf
129
129
  else
130
130
  log_debug { "[#{log_signature}] no block given for callbacks" }
131
131
  end
132
-
132
+
133
133
  send_request
134
134
  end
135
135
  end
136
-
136
+
137
137
  # Send the request to the service through eventmachine.
138
138
  # This method is usually never called directly
139
139
  # but is invoked by method_missing (see docs above).
@@ -146,7 +146,7 @@ module Protobuf
146
146
  # :response_type => "WidgetList",
147
147
  # :request => request
148
148
  # })
149
- #
149
+ #
150
150
  # client.on_success do |res|
151
151
  # res.widgets.each{|w| puts w.inspect }
152
152
  # end
@@ -154,13 +154,13 @@ module Protobuf
154
154
  # client.on_failure do |err|
155
155
  # puts err.message
156
156
  # end
157
- #
157
+ #
158
158
  # client.send_request
159
159
  #
160
160
  def send_request
161
161
  @connector.send_request
162
162
  end
163
-
163
+
164
164
  end
165
165
  end
166
166
  end
@@ -1,22 +1,23 @@
1
1
  module Protobuf
2
2
  module Rpc
3
3
  class Connector
4
-
5
- def self.connector_for_client
6
- if defined?(Protobuf::ClientType)
7
- case Protobuf::ClientType
8
- when "Socket" then
9
- ::Protobuf::Rpc::Connectors::Socket
10
- when "Zmq" then
11
- ::Protobuf::Rpc::Connectors::Zmq
12
- else
13
- ::Protobuf::Rpc::Connectors::EventMachine
14
- end
15
- else
16
- ::Protobuf::Rpc::Connectors::EventMachine
4
+
5
+ # Returns a connector class for the pre-defined connector_type.
6
+ def self.connector_for_client(reload = false)
7
+ if reload || @_connector.nil?
8
+ @_connector = case ::Protobuf.connector_type
9
+ when :evented then
10
+ ::Protobuf::Rpc::Connectors::EventMachine
11
+ when :zmq then
12
+ ::Protobuf::Rpc::Connectors::Zmq
13
+ else
14
+ ::Protobuf::Rpc::Connectors::Socket
15
+ end
17
16
  end
17
+
18
+ return @_connector
18
19
  end
19
-
20
+
20
21
  end
21
22
  end
22
23
  end
@@ -7,10 +7,10 @@ module Protobuf
7
7
  class EventMachine < Base
8
8
 
9
9
  def send_request
10
- ensure_em_running do
10
+ ensure_em_running do
11
11
  f = Fiber.current
12
12
 
13
- EM.next_tick do
13
+ ::EM.next_tick do
14
14
  log_debug { "[#{log_signature}] Scheduling EventMachine client request to be created on next tick" }
15
15
  cnxn = EMClient.connect(options, &ensure_cb)
16
16
  cnxn.on_success(&success_cb) if success_cb
@@ -26,11 +26,11 @@ module Protobuf
26
26
  end
27
27
 
28
28
  # Returns a callable that ensures any errors will be returned to the client
29
- #
29
+ #
30
30
  # If a failure callback was set, just use that as a direct assignment
31
31
  # otherwise implement one here that simply throws an exception, since we
32
32
  # don't want to swallow the black holes.
33
- #
33
+ #
34
34
  def ensure_cb
35
35
  @ensure_cb ||= (@failure_cb || lambda { |error| raise '%s: %s' % [error.code.name, error.message] } )
36
36
  end
@@ -42,42 +42,42 @@ module Protobuf
42
42
  private
43
43
 
44
44
  def ensure_em_running(&blk)
45
- if EM.reactor_running?
45
+ if ::EM.reactor_running?
46
46
  @using_global_reactor = true
47
47
  yield
48
- else
48
+ else
49
49
  @using_global_reactor = false
50
- EM.fiber_run do
50
+ ::EM.fiber_run do
51
51
  blk.call
52
- EM.stop
52
+ ::EM.stop
53
53
  end
54
54
  end
55
55
  end
56
56
 
57
57
  def resume_fiber(fib)
58
- EM::cancel_timer(@timeout_timer)
58
+ ::EM::cancel_timer(@timeout_timer)
59
59
  fib.resume(true)
60
- rescue => ex
60
+ rescue => ex
61
61
  message = 'Synchronous client failed: %s' % ex.message
62
62
  error_stop_reactor(message)
63
63
  end
64
64
 
65
65
  def set_timeout_and_validate_fiber
66
- @timeout_timer = EM::add_timer(@options[:timeout]) do
66
+ @timeout_timer = ::EM::add_timer(@options[:timeout]) do
67
67
  message = 'Client timeout of %d seconds expired' % @options[:timeout]
68
68
  error_stop_reactor(message)
69
69
  end
70
70
 
71
71
  Fiber.yield
72
72
  rescue FiberError
73
- message = "Synchronous calls must be in 'EM.fiber_run' block"
73
+ message = "Synchronous calls must be in 'EM.fiber_run' block"
74
74
  error_stop_reactor(message)
75
75
  end
76
76
 
77
77
  def error_stop_reactor(message)
78
78
  err = Protobuf::Rpc::ClientError.new(Protobuf::Socketrpc::ErrorReason::RPC_ERROR, message)
79
79
  ensure_cb.call(err)
80
- EM.stop unless @using_global_reactor
80
+ ::EM.stop unless @using_global_reactor
81
81
  end
82
82
  end
83
83
  end
@@ -73,35 +73,46 @@
73
73
  # UNKNOWN_HOST = 8; // Could not find supplied host
74
74
  # IO_ERROR = 9; // I/O error while communicating with server
75
75
  # }
76
-
77
- require 'protobuf/message/message'
78
- require 'protobuf/message/enum'
79
- require 'protobuf/message/extend'
76
+ require 'protobuf/message'
80
77
 
81
78
  module Protobuf
82
79
  module Socketrpc
83
- class Request < ::Protobuf::Message
84
- required :string, :service_name, 1
85
- required :string, :method_name, 2
86
- required :bytes, :request_proto, 3
87
- end
88
- class Response < ::Protobuf::Message
89
- optional :bytes, :response_proto, 1
90
- optional :string, :error, 2
91
- optional :bool, :callback, 3, :default => false
92
- optional :ErrorReason, :error_reason, 4
93
- end
94
- class ErrorReason < ::Protobuf::Enum
95
- define :BAD_REQUEST_DATA, 0
96
- define :BAD_REQUEST_PROTO, 1
97
- define :SERVICE_NOT_FOUND, 2
98
- define :METHOD_NOT_FOUND, 3
99
- define :RPC_ERROR, 4
100
- define :RPC_FAILED, 5
101
- define :INVALID_REQUEST_PROTO, 6
102
- define :BAD_RESPONSE_PROTO, 7
103
- define :UNKNOWN_HOST, 8
104
- define :IO_ERROR, 9
105
- end
80
+ ##
81
+ # Enum Classes
82
+ #
83
+ class ErrorReason < ::Protobuf::Enum; end
84
+
85
+ ##
86
+ # Message Classes
87
+ #
88
+ class Request < ::Protobuf::Message; end
89
+ class Response < ::Protobuf::Message; end
90
+
91
+ ##
92
+ # Enum Values
93
+ #
94
+ ::Protobuf::Socketrpc::ErrorReason.define :BAD_REQUEST_DATA, 0
95
+ ::Protobuf::Socketrpc::ErrorReason.define :BAD_REQUEST_PROTO, 1
96
+ ::Protobuf::Socketrpc::ErrorReason.define :SERVICE_NOT_FOUND, 2
97
+ ::Protobuf::Socketrpc::ErrorReason.define :METHOD_NOT_FOUND, 3
98
+ ::Protobuf::Socketrpc::ErrorReason.define :RPC_ERROR, 4
99
+ ::Protobuf::Socketrpc::ErrorReason.define :RPC_FAILED, 5
100
+ ::Protobuf::Socketrpc::ErrorReason.define :INVALID_REQUEST_PROTO, 6
101
+ ::Protobuf::Socketrpc::ErrorReason.define :BAD_RESPONSE_PROTO, 7
102
+ ::Protobuf::Socketrpc::ErrorReason.define :UNKNOWN_HOST, 8
103
+ ::Protobuf::Socketrpc::ErrorReason.define :IO_ERROR, 9
104
+
105
+ ##
106
+ # Message Fields
107
+ #
108
+ ::Protobuf::Socketrpc::Request.required(::Protobuf::Field::StringField, :service_name, 1)
109
+ ::Protobuf::Socketrpc::Request.required(::Protobuf::Field::StringField, :method_name, 2)
110
+ ::Protobuf::Socketrpc::Request.required(::Protobuf::Field::BytesField, :request_proto, 3)
111
+
112
+ ::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::BytesField, :response_proto, 1)
113
+ ::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::StringField, :error, 2)
114
+ ::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::BoolField, :callback, 3, :default => false)
115
+ ::Protobuf::Socketrpc::Response.optional(::Protobuf::Socketrpc::ErrorReason, :error_reason, 4)
116
+
106
117
  end
107
- end
118
+ end
@@ -8,16 +8,6 @@ module Protobuf
8
8
  module Rpc
9
9
  module Server
10
10
 
11
- def _gc_pause_request
12
- return @_gc_pause_request unless @_gc_pause_request.nil?
13
- @_gc_pause_request ||= (defined?(::Protobuf::Rpc::GC_PAUSE_REQUEST) && ::Protobuf::Rpc::GC_PAUSE_REQUEST)
14
- end
15
-
16
- def _gc_pause_serialization
17
- return @_gc_pause_serialization unless @_gc_pause_serialization.nil?
18
- @_gc_pause_serialization ||= (defined?(::Protobuf::Rpc::GC_PAUSE_SERIALIZATION) && ::Protobuf::Rpc::GC_PAUSE_SERIALIZATION)
19
- end
20
-
21
11
  # Invoke the service method dictated by the proto wrapper request object
22
12
  def handle_client
23
13
  # Parse the protobuf request from the socket
@@ -30,7 +20,7 @@ module Protobuf
30
20
 
31
21
  # Call the service method
32
22
  log_debug { "[#{log_signature}] Dispatching client request to service" }
33
- GC.disable if _gc_pause_request
23
+ ::GC.disable if ::Protobuf.gc_pause_server_request
34
24
  invoke_rpc_method
35
25
  rescue => error
36
26
  # Ensure we're handling any errors that try to slip out the back door
@@ -108,11 +98,10 @@ module Protobuf
108
98
  log_debug { "[#{log_signature}] response (should/actual): %s/%s" % [expected.name, actual.name] }
109
99
 
110
100
  # Determine if the service tried to change response types on us
111
- if expected == actual
112
- serialize_response(response)
113
- else
114
- # response types do not match, throw the appropriate error
101
+ if expected != actual
115
102
  raise ::Protobuf::Rpc::BadResponseProto, 'Response proto changed from %s to %s' % [expected.name, actual.name]
103
+ else
104
+ @response.response_proto = response
116
105
  end
117
106
  rescue => error
118
107
  log_error error.message
@@ -122,8 +111,8 @@ module Protobuf
122
111
 
123
112
  # Parses and returns the service and method name from the request wrapper proto
124
113
  def parse_service_info
125
- @klass = ::Protobuf::Util.constantize(@request.service_name)
126
- @method = ::Protobuf::Util.underscore(@request.method_name).to_sym
114
+ @klass = @request.service_name.constantize
115
+ @method = @request.method_name.underscore.to_sym
127
116
 
128
117
  unless @klass.instance_methods.include?(@method)
129
118
  raise MethodNotFound, "Service method #{@request.method_name} is not defined by the service"
@@ -144,17 +133,7 @@ module Protobuf
144
133
  @stats.log_stats
145
134
  @did_respond = true
146
135
  ensure
147
- GC.enable if _gc_pause_request
148
- end
149
-
150
- def serialize_response(response)
151
- GC.disable if _gc_pause_serialization
152
- log_debug { "[#{log_signature}] serializing response: %s" % response.inspect }
153
- @response.response_proto = response.serialize_to_string
154
- rescue
155
- raise BadResponseProto, $!.message
156
- ensure
157
- GC.enable if _gc_pause_serialization
136
+ ::GC.enable if ::Protobuf.gc_pause_server_request
158
137
  end
159
138
  end
160
139
  end
@@ -1,31 +1,31 @@
1
1
  module Protobuf
2
2
  module Rpc
3
- class EventedRunner
3
+ class EventedRunner
4
4
 
5
5
  def self.stop
6
- EventMachine.stop_event_loop if EventMachine.reactor_running?
7
- Protobuf::Logger.info 'Shutdown complete'
6
+ ::EventMachine.stop_event_loop if ::EventMachine.reactor_running?
8
7
  end
9
8
 
10
9
  def self.run(server)
11
10
  # Ensure errors thrown within EM are caught and logged appropriately
12
- EventMachine.error_handler do |error|
13
- if error.message == 'no acceptor'
14
- raise 'Failed binding to %s:%d (%s)' % [server.host, server.port, error.message]
15
- else
16
- Protobuf::Logger.error error.message
17
- Protobuf::Logger.error error.backtrace.join("\n")
18
- end
19
- end
11
+ #EventMachine.error_handler do |error|
12
+ # raise error
13
+ # if error.message == 'no acceptor'
14
+ # raise 'Failed binding to %s:%d (%s)' % [server.host, server.port, error.message]
15
+ # else
16
+ # Protobuf::Logger.error(error.message)
17
+ # Protobuf::Logger.error(error.backtrace.join("\n"))
18
+ # end
19
+ #end
20
20
 
21
21
  # Startup and run the rpc server
22
- EM.schedule do
23
- EventMachine.start_server(server.host, server.port, Protobuf::Rpc::Evented::Server) && \
24
- Protobuf::Logger.info('RPC Server listening at %s:%d in %s' % [server.host, server.port, server.env])
22
+ ::EventMachine.schedule do
23
+ ::EventMachine.start_server(server.host, server.port, ::Protobuf::Rpc::Evented::Server)
25
24
  end
26
25
 
27
26
  # Join or start the reactor
28
- EM.reactor_running? ? EM.reactor_thread.join : EM.run
27
+ yield if block_given?
28
+ ::EM.reactor_running? ? ::EM.reactor_thread.join : ::EM.run
29
29
  end
30
30
  end
31
31
  end