protobuf 2.5.0-java → 2.5.2-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.
data/README.md CHANGED
@@ -14,6 +14,8 @@ So let's dive in and see how to work with all three.
14
14
 
15
15
  ## 1. Generating ruby classes from `.proto` files
16
16
 
17
+ _The `protobuf` package is required for compilation. Mac: `brew install protobuf`, Ubuntu: `sudo apt-get install -y protobuf`_
18
+
17
19
  Protocol Buffers are great because they allow you to clearly define data storage or data transfer packets. Google officially supports Java, C++, and Python for compilation and usage. Let's make it ruby aware!
18
20
 
19
21
  Let's say you have a `defs.proto` file that defines a User message.
@@ -24,9 +26,11 @@ message User {
24
26
  required string first_name = 1;
25
27
  required string last_name = 2;
26
28
  }
29
+ ```
27
30
 
28
31
  Now let's compile that definition to ruby:
29
32
 
33
+ ```
30
34
  $ rprotoc defs.proto --ruby_out ./lib
31
35
  ```
32
36
 
@@ -14,6 +14,19 @@ module Protobuf
14
14
 
15
15
  module_function
16
16
 
17
+ # Client Host
18
+ #
19
+ # Default: `hostname` of the system
20
+ #
21
+ # The name or address of the host to use during client RPC calls.
22
+ def self.client_host
23
+ @_client_host ||= `hostname`.chomp
24
+ end
25
+
26
+ def self.client_host=(host)
27
+ @_client_host = host
28
+ end
29
+
17
30
  # Connector Type
18
31
  #
19
32
  # Default: socket
@@ -31,7 +31,7 @@ module Protobuf
31
31
 
32
32
  option :debug, :type => :boolean, :default => false, :aliases => %w(-d), :desc => 'Debug Mode. Override log level to DEBUG.'
33
33
  option :gc_pause_request, :type => :boolean, :default => false, :desc => 'Enable/Disable GC pause during request.'
34
- option :print_deprecation_warnings, :type => :boolean, :default => true, :desc => 'Cause use of deprecated fields to be printed or ignored.'
34
+ option :print_deprecation_warnings, :type => :boolean, :default => nil, :desc => 'Cause use of deprecated fields to be printed or ignored.'
35
35
 
36
36
  def start(app_file)
37
37
  debug_say 'Configuring the rpc_server process'
@@ -61,13 +61,23 @@ module Protobuf
61
61
 
62
62
  # Tell protobuf how to handle the printing of deprecated field usage.
63
63
  def configure_deprecation_warnings
64
- ::Protobuf.print_deprecation_warnings = options.print_deprecation_warnings?
64
+ if options.print_deprecation_warnings.nil?
65
+ ::Protobuf.print_deprecation_warnings = !ENV.key?("PB_IGNORE_DEPRECATIONS")
66
+ else
67
+ ::Protobuf.print_deprecation_warnings = options.print_deprecation_warnings?
68
+ end
65
69
  end
66
70
 
67
71
  # If we pause during request we don't need to pause in serialization
68
72
  def configure_gc
69
73
  debug_say 'Configuring gc'
70
- ::Protobuf.gc_pause_server_request = options.gc_pause_request?
74
+
75
+ if defined?(JRUBY_VERSION)
76
+ # GC.enable/disable are noop's on Jruby
77
+ ::Protobuf.gc_pause_server_request = false
78
+ else
79
+ ::Protobuf.gc_pause_server_request = options.gc_pause_request?
80
+ end
71
81
  end
72
82
 
73
83
  # Setup the protobuf logger.
@@ -91,15 +101,24 @@ module Protobuf
91
101
  def configure_server_mode
92
102
  debug_say 'Configuring runner mode'
93
103
  if options.zmq? && ! options.evented? && ! options.socket?
94
- @mode = :zmq
95
- @runner = ::Protobuf::Rpc::ZmqRunner
104
+ server_zmq!
96
105
  elsif options.evented? && ! options.zmq? && ! options.socket?
97
- @mode = :evented
98
- @runner = ::Protobuf::Rpc::EventedRunner
106
+ server_evented!
107
+ elsif (env_server_type = ENV["PB_SERVER_TYPE"])
108
+ case
109
+ when env_server_type =~ /zmq/i then
110
+ server_zmq!
111
+ when env_server_type =~ /socket/i then
112
+ server_socket!
113
+ when env_server_type =~ /evented/i then
114
+ server_evented!
115
+ else
116
+ say "WARNING: You have provided incorrect option 'PB_SERVER_TYPE=#{env_server_type}'. Defaulting to socket mode.", :yellow
117
+ server_socket!
118
+ end
99
119
  else
100
120
  say 'WARNING: You have provided multiple mode options. Defaulting to socket mode.', :yellow if multi_mode?
101
- @mode = :socket
102
- @runner = ::Protobuf::Rpc::SocketRunner
121
+ server_socket!
103
122
  end
104
123
  end
105
124
 
@@ -173,6 +192,21 @@ module Protobuf
173
192
  exit(1)
174
193
  end
175
194
 
195
+ def server_evented!
196
+ @mode = :evented
197
+ @runner = ::Protobuf::Rpc::EventedRunner
198
+ end
199
+
200
+ def server_socket!
201
+ @mode = :socket
202
+ @runner = ::Protobuf::Rpc::SocketRunner
203
+ end
204
+
205
+ def server_zmq!
206
+ @mode = :zmq
207
+ @runner = ::Protobuf::Rpc::ZmqRunner
208
+ end
209
+
176
210
  # Start the runner and log the relevant options.
177
211
  def start_server!
178
212
  debug_say 'Invoking server start'
@@ -9,14 +9,15 @@ module Protobuf
9
9
  module Rpc
10
10
  module Connectors
11
11
  DEFAULT_OPTIONS = {
12
- :service => nil, # Service to invoke
13
- :method => nil, # Service method to call
14
- :host => '127.0.0.1', # A default host (usually overridden)
15
- :port => '9399', # A default port (usually overridden)
12
+ :service => nil, # Fully-qualified Service class
13
+ :method => nil, # Service method to invoke
14
+ :host => '127.0.0.1', # The hostname or address of the service (usually overridden or pre-configured)
15
+ :port => '9399', # The port of the service (usually overridden or pre-configured)
16
16
  :request => nil, # The request object sent by the client
17
17
  :request_type => nil, # The request type expected by the client
18
18
  :response_type => nil, # The response type expected by the client
19
- :timeout => 30 # The default timeout for the request, also handled by client.rb
19
+ :timeout => 30, # The default timeout for the request, also handled by client.rb
20
+ :client_host => nil # The hostname or address of this client
20
21
  }
21
22
 
22
23
  class Base
@@ -11,6 +11,10 @@ module Protobuf
11
11
  end
12
12
  end
13
13
 
14
+ def request_caller
15
+ @options[:client_host] || ::Protobuf.client_host
16
+ end
17
+
14
18
  def complete
15
19
  @stats.stop
16
20
  log_info { @stats.to_s }
@@ -101,21 +105,21 @@ module Protobuf
101
105
  fail(:RPC_ERROR, "Connection error: #{e.message}")
102
106
  end
103
107
 
104
- def rpc_request_data
105
- validate_request_type
108
+ def request_bytes
109
+ validate_request_type!
110
+ fields = { :service_name => @options[:service].name,
111
+ :method_name => @options[:method].to_s,
112
+ :request_proto => @options[:request],
113
+ :caller => request_caller }
106
114
 
107
- return ::Protobuf::Socketrpc::Request.new(
108
- :service_name => @options[:service].name,
109
- :method_name => @options[:method].to_s,
110
- :request_proto => @options[:request]
111
- ).serialize_to_string
115
+ return ::Protobuf::Socketrpc::Request.new(fields).serialize_to_string
112
116
  rescue => e
113
117
  fail(:INVALID_REQUEST_PROTO, "Could not set request proto: #{e.message}")
114
118
  end
115
119
 
116
120
  def setup_connection
117
121
  initialize_stats
118
- @request_data = rpc_request_data
122
+ @request_data = request_bytes
119
123
  end
120
124
 
121
125
  def succeed(response)
@@ -129,7 +133,7 @@ module Protobuf
129
133
  complete
130
134
  end
131
135
 
132
- def validate_request_type
136
+ def validate_request_type!
133
137
  unless @options[:request].class == @options[:request_type]
134
138
  expected = @options[:request_type].name
135
139
  actual = @options[:request].class.name
@@ -138,13 +142,13 @@ module Protobuf
138
142
  end
139
143
 
140
144
  def verify_callbacks
141
- if !any_callbacks?
145
+ unless any_callbacks?
142
146
  log_debug { sign_message("No callbacks set, using data_callback") }
143
147
  @success_cb = @failure_cb = self.method(:data_callback)
144
148
  end
145
149
  end
146
150
 
147
- def verify_options
151
+ def verify_options!
148
152
  # Verify the options that are necessary and merge them in
149
153
  [:service, :method, :host, :port].each do |opt|
150
154
  fail(:RPC_ERROR, "Invalid client connection configuration. #{opt} must be a defined option.") if @options[opt].nil?
@@ -17,7 +17,7 @@ module Protobuf
17
17
  @failure_cb = failure_cb
18
18
  @options = DEFAULT_OPTIONS.merge(options)
19
19
  @response_buffer = ::Protobuf::Rpc::Buffer.new(:read)
20
- verify_options
20
+ verify_options!
21
21
 
22
22
  log_debug { sign_message("Client Initialized: #{options.inspect}") }
23
23
  rescue => e
@@ -1,78 +1,6 @@
1
- ### Generated by rprotoc. DO NOT EDIT!
2
- ### <proto file: rpc.proto>
3
- # // Copyright (c) 2009 Shardul Deo
4
- # //
5
- # // Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # // of this software and associated documentation files (the "Software"), to deal
7
- # // in the Software without restriction, including without limitation the rights
8
- # // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # // copies of the Software, and to permit persons to whom the Software is
10
- # // furnished to do so, subject to the following conditions:
11
- # //
12
- # // The above copyright notice and this permission notice shall be included in
13
- # // all copies or substantial portions of the Software.
14
- # //
15
- # // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # // THE SOFTWARE.
22
- #
23
- # // Author: Shardul Deo
24
- # //
25
- # // Protobufs needed for socket rpcs.
26
- #
27
- # package protobuf.socketrpc;
28
- #
29
- # message Request {
30
- #
31
- # // RPC service full name
32
- # required string service_name = 1;
33
- #
34
- # // RPC method name
35
- # required string method_name = 2;
36
- #
37
- # // RPC request proto
38
- # required bytes request_proto = 3;
39
- # }
40
- #
41
- # message Response {
42
- #
43
- # // RPC response proto
44
- # optional bytes response_proto = 1;
45
- #
46
- # // Error, if any
47
- # optional string error = 2;
48
- #
49
- # // Was callback invoked
50
- # optional bool callback = 3 [default = false];
51
- #
52
- # // Error Reason
53
- # optional ErrorReason error_reason = 4;
54
- # }
55
- #
56
- # // Possible error reasons
57
- # // The server-side errors are returned in the response from the server.
58
- # // The client-side errors are returned by the client-side code when it doesn't
59
- # // have a response from the server.
60
- # enum ErrorReason {
61
- #
62
- # // Server-side errors
63
- # BAD_REQUEST_DATA = 0; // Server received bad request data
64
- # BAD_REQUEST_PROTO = 1; // Server received bad request proto
65
- # SERVICE_NOT_FOUND = 2; // Service not found on server
66
- # METHOD_NOT_FOUND = 3; // Method not found on server
67
- # RPC_ERROR = 4; // Rpc threw exception on server
68
- # RPC_FAILED = 5; // Rpc failed on server
69
- #
70
- # // Client-side errors (these are returned by the client-side code)
71
- # INVALID_REQUEST_PROTO = 6; // Rpc was called with invalid request proto
72
- # BAD_RESPONSE_PROTO = 7; // Server returned a bad response proto
73
- # UNKNOWN_HOST = 8; // Could not find supplied host
74
- # IO_ERROR = 9; // I/O error while communicating with server
75
- # }
1
+ ##
2
+ # This file is auto-generated. DO NOT EDIT!
3
+ #
76
4
  require 'protobuf/message'
77
5
 
78
6
  module Protobuf
@@ -91,28 +19,35 @@ module Protobuf
91
19
  ##
92
20
  # Enum Values
93
21
  #
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
22
+ class ErrorReason
23
+ define :BAD_REQUEST_DATA, 0
24
+ define :BAD_REQUEST_PROTO, 1
25
+ define :SERVICE_NOT_FOUND, 2
26
+ define :METHOD_NOT_FOUND, 3
27
+ define :RPC_ERROR, 4
28
+ define :RPC_FAILED, 5
29
+ define :INVALID_REQUEST_PROTO, 6
30
+ define :BAD_RESPONSE_PROTO, 7
31
+ define :UNKNOWN_HOST, 8
32
+ define :IO_ERROR, 9
33
+ end
104
34
 
105
35
  ##
106
36
  # Message Fields
107
37
  #
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)
38
+ class Request
39
+ required ::Protobuf::Field::StringField, :service_name, 1
40
+ required ::Protobuf::Field::StringField, :method_name, 2
41
+ optional ::Protobuf::Field::BytesField, :request_proto, 3
42
+ optional ::Protobuf::Field::StringField, :caller, 4
43
+ end
111
44
 
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)
45
+ class Response
46
+ optional ::Protobuf::Field::BytesField, :response_proto, 1
47
+ optional ::Protobuf::Field::StringField, :error, 2
48
+ optional ::Protobuf::Field::BoolField, :callback, 3, :default => false
49
+ optional ::Protobuf::Socketrpc::ErrorReason, :error_reason, 4
50
+ end
116
51
 
117
52
  end
118
53
  end
@@ -14,7 +14,6 @@ module Protobuf
14
14
  @request = ::Protobuf::Socketrpc::Request.new
15
15
  @response = ::Protobuf::Socketrpc::Response.new
16
16
  @stats = Protobuf::Rpc::Stat.new(:SERVER)
17
- set_peer
18
17
  end
19
18
 
20
19
  def disable_gc!
@@ -25,12 +24,11 @@ module Protobuf
25
24
  ::GC.enable && ::GC.start if ::Protobuf.gc_pause_server_request?
26
25
  end
27
26
 
28
- # no-op, implemented by including class if desired.
29
- def set_peer; end
30
-
31
27
  # Invoke the service method dictated by the proto wrapper request object
32
28
  def handle_client
33
29
  parse_request_from_buffer
30
+ @stats.client = @request.caller
31
+
34
32
  @dispatcher = ::Protobuf::Rpc::ServiceDispatcher.new(@request)
35
33
  @stats.dispatcher = @dispatcher
36
34
 
@@ -31,10 +31,6 @@ module Protobuf
31
31
  log_debug { sign_message("sending data: #{response_buffer.inspect}") }
32
32
  super(response_buffer.write)
33
33
  end
34
-
35
- def set_peer
36
- @stats.client = ::Socket.unpack_sockaddr_in(get_peername)
37
- end
38
34
  end
39
35
  end
40
36
  end
@@ -74,7 +74,7 @@ module Protobuf
74
74
  client, sockaddr = @server.accept
75
75
  @listen_fds << client
76
76
  else
77
- if !@working.include?(client)
77
+ unless @working.include?(client)
78
78
  @working << @listen_fds.delete(client)
79
79
  log_debug { sign_message("Working") }
80
80
  @threads << { :thread => new_worker(client), :socket => client }
@@ -52,10 +52,6 @@ module Protobuf
52
52
  @_log_signature ||= "server-#{self.class}-#{object_id}"
53
53
  end
54
54
 
55
- def set_peer
56
- @stats.client = ::Socket.unpack_sockaddr_in(@socket.getpeername)
57
- end
58
-
59
55
  def socket_writable?
60
56
  ! @socket.nil? && ! @socket.closed?
61
57
  end
@@ -29,7 +29,7 @@ module Protobuf
29
29
  def handle_request(socket)
30
30
  @request_data = ''
31
31
  zmq_error_check(socket.recv_string(@request_data))
32
- log_debug { sign_message("handling request") } if !@request_data.nil?
32
+ log_debug { sign_message("handling request") } unless @request_data.nil?
33
33
  end
34
34
 
35
35
  def run
@@ -15,8 +15,6 @@ module Protobuf
15
15
  include ::Protobuf::Logger::LogMethods
16
16
 
17
17
 
18
- attr_reader :response, :rpc
19
-
20
18
  DEFAULT_HOST = '127.0.0.1'.freeze
21
19
  DEFAULT_PORT = 9399
22
20
 
@@ -102,23 +100,26 @@ module Protobuf
102
100
  # Instance Methods
103
101
  #
104
102
 
103
+ attr_reader :response, :method_name, :client_host
104
+
105
105
  # Initialize a service with the rpc endpoint name and the bytes
106
106
  # for the request.
107
- def initialize(rpc, request_bytes)
108
- @rpc = rpc
109
- @request_bytes = request_bytes
107
+ def initialize(method_name, request_bytes, client_host = nil)
108
+ @method_name = method_name
109
+ @client_host = client_host
110
+ @_request_bytes = request_bytes
110
111
  end
111
112
 
112
113
  # Register a failure callback for use when rpc_failed is invoked.
113
114
  #
114
115
  def on_rpc_failed(callable)
115
- @rpc_failed_callback ||= callable
116
+ @_rpc_failed_callback ||= callable
116
117
  end
117
118
 
118
119
  # Response object for this rpc cycle. Not assignable.
119
120
  #
120
121
  def response
121
- @_response ||= rpcs[@rpc].response_type.new
122
+ @_response ||= response_type.new
122
123
  end
123
124
 
124
125
  # Convenience method to get back to class method.
@@ -144,18 +145,26 @@ module Protobuf
144
145
 
145
146
  private
146
147
 
148
+ def response_type
149
+ @_response_type ||= rpcs[@method_name].response_type
150
+ end
151
+
147
152
  # Request object for this rpc cycle. Not assignable.
148
153
  #
149
154
  def request
150
- @_request ||= if @request_bytes.present?
151
- rpcs[@rpc].request_type.new.parse_from_string(@request_bytes)
155
+ @_request ||= if @_request_bytes.present?
156
+ request_type.new.parse_from_string(@_request_bytes)
152
157
  else
153
- rpcs[@rpc].request_type.new
158
+ request_type.new
154
159
  end
155
160
  rescue => e
156
161
  raise BadRequestProto, "Unable to parse request: #{e.message}"
157
162
  end
158
163
 
164
+ def request_type
165
+ @_request_type ||= rpcs[@method_name].request_type
166
+ end
167
+
159
168
  # Sugar to make an rpc method feel like a controller method.
160
169
  # If this method is not called, the response will be the memoized
161
170
  # object returned by the response reader.
@@ -165,10 +174,22 @@ module Protobuf
165
174
  end
166
175
  alias_method :return_from_whence_you_came, :respond_with
167
176
 
177
+ # Renamed attribute from prior implementaiton due to lack of clarity
178
+ # in what the variable contained. DEPRECATED.
179
+ def rpc
180
+ if ::Protobuf.print_deprecation_warnings?
181
+ $stderr.puts <<-ERROR
182
+ [WARNING] Service#rpc method has been deprecated
183
+ and will be removed in a future version of protobuf.
184
+ ERROR
185
+ end
186
+ @method_name
187
+ end
188
+
168
189
  # Automatically fail a service method.
169
190
  #
170
191
  def rpc_failed(message)
171
- @rpc_failed_callback.call(message)
192
+ @_rpc_failed_callback.call(message)
172
193
  end
173
194
 
174
195
  end
@@ -74,7 +74,7 @@ module Protobuf
74
74
  request_proto = outer_request.has_field?(:request_proto) ? outer_request.request_proto : nil
75
75
 
76
76
  if service_klass.rpc_method?(method_name)
77
- self.service = service_klass.new(method_name, request_proto)
77
+ self.service = service_klass.new(method_name, request_proto, outer_request.caller)
78
78
  self.callable_method = service.callable_rpc_method(method_name)
79
79
  self.definition = service.rpcs[method_name]
80
80
  else
@@ -14,12 +14,12 @@ module Protobuf
14
14
  start
15
15
  end
16
16
 
17
- def client=(peer)
18
- @client = {:port => peer[0], :ip => peer[1]}
17
+ def client=(client_host)
18
+ @client = client_host
19
19
  end
20
20
 
21
21
  def client
22
- @client ? "#{@client[:ip]}:#{@client[:port]}" : nil
22
+ @client || nil
23
23
  end
24
24
 
25
25
  def method_name
@@ -47,7 +47,7 @@ module Protobuf
47
47
  end
48
48
 
49
49
  def stop
50
- start if !@start_time
50
+ start unless @start_time
51
51
  @end_time ||= Time.now
52
52
  end
53
53
 
@@ -1,4 +1,4 @@
1
1
  module Protobuf
2
- VERSION = '2.5.0'
2
+ VERSION = '2.5.2'
3
3
  PROTOC_VERSION = '2.4.1'
4
4
  end
@@ -18,56 +18,45 @@
18
18
  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  // THE SOFTWARE.
20
20
 
21
- // Author: Shardul Deo
21
+ // Authors: Shardul Deo, BJ Neilsen
22
22
  //
23
23
  // Protobufs needed for socket rpcs.
24
24
 
25
25
  package protobuf.socketrpc;
26
26
 
27
- message Request {
28
-
29
- // RPC service full name
30
- required string service_name = 1;
31
-
32
- // RPC method name
33
- required string method_name = 2;
34
-
35
- // RPC request proto
36
- optional bytes request_proto = 3;
27
+ message Request
28
+ {
29
+ required string service_name = 1; // Fully- qualified Service class name
30
+ required string method_name = 2; // Service method to invoke
31
+ optional bytes request_proto = 3; // Serialized request bytes
32
+ optional string caller = 4; // Calling hostname or address
37
33
  }
38
34
 
39
- message Response {
40
-
41
- // RPC response proto
42
- optional bytes response_proto = 1;
43
-
44
- // Error, if any
45
- optional string error = 2;
46
-
47
- // Was callback invoked
48
- optional bool callback = 3 [default = false];
49
-
50
- // Error Reason
51
- optional ErrorReason error_reason = 4;
35
+ message Response
36
+ {
37
+ optional bytes response_proto = 1; // Serialized response
38
+ optional string error = 2; // Error message, if any
39
+ optional bool callback = 3 [default = false]; // Was callback invoked (not sure what this is for)
40
+ optional ErrorReason error_reason = 4; // Error Reason
52
41
  }
53
42
 
54
43
  // Possible error reasons
55
44
  // The server-side errors are returned in the response from the server.
56
- // The client-side errors are returned by the client-side code when it doesn't
45
+ // The client-side errors are returned by the client-side code when it doesn't
57
46
  // have a response from the server.
58
- enum ErrorReason {
59
-
47
+ enum ErrorReason
48
+ {
60
49
  // Server-side errors
61
- BAD_REQUEST_DATA = 0; // Server received bad request data
62
- BAD_REQUEST_PROTO = 1; // Server received bad request proto
63
- SERVICE_NOT_FOUND = 2; // Service not found on server
64
- METHOD_NOT_FOUND = 3; // Method not found on server
65
- RPC_ERROR = 4; // Rpc threw exception on server
66
- RPC_FAILED = 5; // Rpc failed on server
67
-
50
+ BAD_REQUEST_DATA = 0; // Server received bad request data
51
+ BAD_REQUEST_PROTO = 1; // Server received bad request proto
52
+ SERVICE_NOT_FOUND = 2; // Service not found on server
53
+ METHOD_NOT_FOUND = 3; // Method not found on server
54
+ RPC_ERROR = 4; // Rpc threw exception on server
55
+ RPC_FAILED = 5; // Rpc failed on server
56
+
68
57
  // Client-side errors (these are returned by the client-side code)
69
- INVALID_REQUEST_PROTO = 6; // Rpc was called with invalid request proto
70
- BAD_RESPONSE_PROTO = 7; // Server returned a bad response proto
71
- UNKNOWN_HOST = 8; // Could not find supplied host
72
- IO_ERROR = 9; // I/O error while communicating with server
58
+ INVALID_REQUEST_PROTO = 6; // Rpc was called with invalid request proto
59
+ BAD_RESPONSE_PROTO = 7; // Server returned a bad response proto
60
+ UNKNOWN_HOST = 8; // Could not find supplied host
61
+ IO_ERROR = 9; // I/O error while communicating with server
73
62
  }
@@ -3,127 +3,134 @@ require 'protobuf/cli'
3
3
 
4
4
  describe ::Protobuf::CLI do
5
5
 
6
- let(:app_file) do
7
- File.expand_path('../../../support/test_app_file.rb', __FILE__)
8
- end
9
-
10
- before do
11
- ::Protobuf::Rpc::SocketRunner.stub(:run)
12
- ::Protobuf::Rpc::ZmqRunner.stub(:run)
13
- ::Protobuf::Rpc::EventedRunner.stub(:run)
14
- end
15
-
16
- describe '#start' do
17
- let(:base_args) { [ 'start', app_file ] }
18
- let(:test_args) { [] }
19
- let(:args) { base_args + test_args }
20
-
21
- context 'host option' do
22
- let(:test_args) { [ '--host=123.123.123.123' ] }
23
-
24
- it 'sends the host option to the runner' do
25
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
26
- options[:host].should eq '123.123.123.123'
27
- end
28
- described_class.start(args)
29
- end
30
- end
31
-
32
- context 'port option' do
33
- let(:test_args) { [ '--port=12345' ] }
34
-
35
- it 'sends the port option to the runner' do
36
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
37
- options[:port].should eq 12345
38
- end
39
- described_class.start(args)
40
- end
41
- end
42
-
43
- context 'threads option' do
44
- let(:test_args) { [ '--threads=500' ] }
45
-
46
- it 'sends the threads option to the runner' do
47
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
48
- options[:threads].should eq 500
49
- end
50
- described_class.start(args)
51
- end
52
- end
53
-
54
- context 'backlog option' do
55
- let(:test_args) { [ '--backlog=500' ] }
56
-
57
- it 'sends the backlog option to the runner' do
58
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
59
- options[:backlog].should eq 500
60
- end
61
- described_class.start(args)
62
- end
63
- end
64
-
65
- context 'threshold option' do
66
- let(:test_args) { [ '--threshold=500' ] }
67
-
68
- it 'sends the backlog option to the runner' do
69
- ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
70
- options[:threshold].should eq 500
71
- end
72
- described_class.start(args)
73
- end
74
- end
75
-
76
- context 'log options' do
77
- let(:test_args) { [ '--log=mylog.log', '--level=0' ] }
78
-
79
- it 'sends the log file and level options to the runner' do
80
- ::Protobuf::Logger.should_receive(:configure) do |options|
81
- options[:file].should eq 'mylog.log'
82
- options[:level].should eq 0
83
- end
84
- described_class.start(args)
85
- end
86
-
87
- context 'when debugging' do
88
- let(:test_args) { [ '--level=3', '--debug' ] }
89
-
90
- it 'overrides the log-level to DEBUG' do
91
- ::Protobuf::Logger.should_receive(:configure) do |options|
92
- options[:level].should eq ::Logger::DEBUG
93
- end
94
- described_class.start(args)
95
- end
96
- end
97
- end
98
-
99
- context 'gc options' do
100
-
101
- context 'when gc options are not present' do
102
- let(:test_args) { [] }
103
-
104
- it 'sets both request and serialization pausing to false' do
105
- described_class.start(args)
106
- ::Protobuf.gc_pause_server_request?.should be_false
107
- end
108
- end
109
-
110
- context 'request pausing' do
111
- let(:test_args) { [ '--gc_pause_request' ] }
112
-
113
- it 'sets the configuration option to GC pause server request' do
114
- described_class.start(args)
115
- ::Protobuf.gc_pause_server_request?.should be_true
116
- end
117
- end
118
- end
119
-
120
- context 'deprecation options' do
6
+ let(:app_file) do
7
+ File.expand_path('../../../support/test_app_file.rb', __FILE__)
8
+ end
9
+
10
+ before do
11
+ ::Protobuf::Rpc::SocketRunner.stub(:run)
12
+ ::Protobuf::Rpc::ZmqRunner.stub(:run)
13
+ ::Protobuf::Rpc::EventedRunner.stub(:run)
14
+ end
15
+
16
+ describe '#start' do
17
+ let(:base_args) { [ 'start', app_file ] }
18
+ let(:test_args) { [] }
19
+ let(:args) { base_args + test_args }
20
+
21
+ context 'host option' do
22
+ let(:test_args) { [ '--host=123.123.123.123' ] }
23
+
24
+ it 'sends the host option to the runner' do
25
+ ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
26
+ options[:host].should eq '123.123.123.123'
27
+ end
28
+ described_class.start(args)
29
+ end
30
+ end
31
+
32
+ context 'port option' do
33
+ let(:test_args) { [ '--port=12345' ] }
34
+
35
+ it 'sends the port option to the runner' do
36
+ ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
37
+ options[:port].should eq 12345
38
+ end
39
+ described_class.start(args)
40
+ end
41
+ end
42
+
43
+ context 'threads option' do
44
+ let(:test_args) { [ '--threads=500' ] }
45
+
46
+ it 'sends the threads option to the runner' do
47
+ ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
48
+ options[:threads].should eq 500
49
+ end
50
+ described_class.start(args)
51
+ end
52
+ end
53
+
54
+ context 'backlog option' do
55
+ let(:test_args) { [ '--backlog=500' ] }
56
+
57
+ it 'sends the backlog option to the runner' do
58
+ ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
59
+ options[:backlog].should eq 500
60
+ end
61
+ described_class.start(args)
62
+ end
63
+ end
64
+
65
+ context 'threshold option' do
66
+ let(:test_args) { [ '--threshold=500' ] }
67
+
68
+ it 'sends the backlog option to the runner' do
69
+ ::Protobuf::Rpc::SocketRunner.should_receive(:run) do |options|
70
+ options[:threshold].should eq 500
71
+ end
72
+ described_class.start(args)
73
+ end
74
+ end
75
+
76
+ context 'log options' do
77
+ let(:test_args) { [ '--log=mylog.log', '--level=0' ] }
78
+
79
+ it 'sends the log file and level options to the runner' do
80
+ ::Protobuf::Logger.should_receive(:configure) do |options|
81
+ options[:file].should eq 'mylog.log'
82
+ options[:level].should eq 0
83
+ end
84
+ described_class.start(args)
85
+ end
86
+
87
+ context 'when debugging' do
88
+ let(:test_args) { [ '--level=3', '--debug' ] }
89
+
90
+ it 'overrides the log-level to DEBUG' do
91
+ ::Protobuf::Logger.should_receive(:configure) do |options|
92
+ options[:level].should eq ::Logger::DEBUG
93
+ end
94
+ described_class.start(args)
95
+ end
96
+ end
97
+ end
98
+
99
+ context 'gc options' do
100
+
101
+ context 'when gc options are not present' do
102
+ let(:test_args) { [] }
103
+
104
+ it 'sets both request and serialization pausing to false' do
105
+ described_class.start(args)
106
+ ::Protobuf.gc_pause_server_request?.should be_false
107
+ end
108
+ end
109
+
110
+ context 'request pausing' do
111
+ let(:test_args) { [ '--gc_pause_request' ] }
112
+
113
+ it 'sets the configuration option to GC pause server request' do
114
+ described_class.start(args)
115
+ ::Protobuf.gc_pause_server_request?.should be_true
116
+ end
117
+ end
118
+ end
119
+
120
+ context 'deprecation options' do
121
121
  context 'when not given' do
122
122
  let(:test_args) { [] }
123
123
 
124
- it 'sets the deprecation warning flag to its default value' do
124
+ it 'sets the deprecation warning flag to true when no ENV is present and no command line option' do
125
+ described_class.start(args)
126
+ ::Protobuf.print_deprecation_warnings?.should be_true
127
+ end
128
+
129
+ it 'sets the deprecation warning flag to false if ENV["PB_IGNORE_DEPRECATIONS"] is present' do
130
+ ENV["PB_IGNORE_DEPRECATIONS"] = "1"
125
131
  described_class.start(args)
126
- ::Protobuf.print_deprecation_warnings?.should be_true
132
+ ::Protobuf.print_deprecation_warnings?.should be_false
133
+ ENV.delete("PB_IGNORE_DEPRECATIONS")
127
134
  end
128
135
  end
129
136
 
@@ -132,7 +139,7 @@ describe ::Protobuf::CLI do
132
139
 
133
140
  it 'sets the deprecation warning flag to true' do
134
141
  described_class.start(args)
135
- ::Protobuf.print_deprecation_warnings?.should be_true
142
+ ::Protobuf.print_deprecation_warnings?.should be_true
136
143
  end
137
144
  end
138
145
 
@@ -141,72 +148,96 @@ describe ::Protobuf::CLI do
141
148
 
142
149
  it 'sets the deprecation warning flag to false' do
143
150
  described_class.start(args)
144
- ::Protobuf.print_deprecation_warnings?.should be_false
151
+ ::Protobuf.print_deprecation_warnings?.should be_false
145
152
  end
146
153
  end
147
- end
154
+ end
148
155
 
149
- context 'run modes' do
156
+ context 'run modes' do
150
157
 
151
- context 'socket' do
152
- let(:test_args) { [ '--socket' ] }
158
+ context 'socket' do
159
+ let(:test_args) { [ '--socket' ] }
160
+ let(:runner) { ::Protobuf::Rpc::SocketRunner }
153
161
 
154
- before do
155
- ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
156
- ::Protobuf::Rpc::ZmqRunner.should_not_receive(:run)
157
- end
162
+ before do
163
+ ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
164
+ ::Protobuf::Rpc::ZmqRunner.should_not_receive(:run)
165
+ end
166
+
167
+ it 'is activated by the --socket switch' do
168
+ runner.should_receive(:run)
169
+ described_class.start(args)
170
+ end
158
171
 
159
- it 'is activated by the --socket switch' do
160
- ::Protobuf::Rpc::SocketRunner.should_receive(:run)
161
- described_class.start(args)
162
- end
172
+ it 'is activated by PB_SERVER_TYPE=Socket ENV variable' do
173
+ ENV['PB_SERVER_TYPE'] = "Socket"
174
+ runner.should_receive(:run)
175
+ described_class.start(args)
176
+ ENV.delete('PB_SERVER_TYPE')
177
+ end
163
178
 
164
- it 'configures the connector type to be socket' do
179
+ it 'configures the connector type to be socket' do
165
180
  load "protobuf/socket.rb"
166
- ::Protobuf.connector_type.should == :socket
167
- end
168
- end
181
+ ::Protobuf.connector_type.should == :socket
182
+ end
183
+ end
169
184
 
170
- context 'evented' do
171
- let(:test_args) { [ '--evented' ] }
185
+ context 'evented' do
186
+ let(:test_args) { [ '--evented' ] }
187
+ let(:runner) { ::Protobuf::Rpc::EventedRunner }
172
188
 
173
- before do
174
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
175
- ::Protobuf::Rpc::ZmqRunner.should_not_receive(:run)
176
- end
189
+ before do
190
+ ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
191
+ ::Protobuf::Rpc::ZmqRunner.should_not_receive(:run)
192
+ end
193
+
194
+ it 'is activated by the --evented switch' do
195
+ runner.should_receive(:run)
196
+ described_class.start(args)
197
+ end
177
198
 
178
- it 'is activated by the --evented switch' do
179
- ::Protobuf::Rpc::EventedRunner.should_receive(:run)
180
- described_class.start(args)
181
- end
199
+ it 'is activated by PB_SERVER_TYPE=Evented ENV variable' do
200
+ ENV['PB_SERVER_TYPE'] = "Evented"
201
+ runner.should_receive(:run)
202
+ described_class.start(args)
203
+ ENV.delete('PB_SERVER_TYPE')
204
+ end
182
205
 
183
- it 'configures the connector type to be evented' do
206
+ it 'configures the connector type to be evented' do
184
207
  load "protobuf/evented.rb"
185
- ::Protobuf.connector_type.should == :evented
186
- end
187
- end
208
+ ::Protobuf.connector_type.should == :evented
209
+ end
210
+ end
188
211
 
189
- context 'zmq' do
190
- let(:test_args) { [ '--zmq' ] }
212
+ context 'zmq' do
213
+ let(:test_args) { [ '--zmq' ] }
214
+ let(:runner) { ::Protobuf::Rpc::ZmqRunner }
191
215
 
192
- before do
193
- ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
194
- ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
195
- end
216
+ before do
217
+ ::Protobuf::Rpc::SocketRunner.should_not_receive(:run)
218
+ ::Protobuf::Rpc::EventedRunner.should_not_receive(:run)
219
+ end
220
+
221
+ it 'is activated by the --zmq switch' do
222
+ runner.should_receive(:run)
223
+ described_class.start(args)
224
+ end
196
225
 
197
- it 'is activated by the --zmq switch' do
198
- ::Protobuf::Rpc::ZmqRunner.should_receive(:run)
199
- described_class.start(args)
200
- end
226
+ it 'is activated by PB_SERVER_TYPE=Zmq ENV variable' do
227
+ ENV['PB_SERVER_TYPE'] = "Zmq"
228
+ runner.should_receive(:run)
229
+ described_class.start(args)
230
+ ENV.delete('PB_SERVER_TYPE')
231
+ end
201
232
 
202
- it 'configures the connector type to be zmq' do
233
+ it 'configures the connector type to be zmq' do
203
234
  load "protobuf/zmq.rb"
204
- ::Protobuf.connector_type.should == :zmq
205
- end
206
- end
235
+ ::Protobuf.connector_type.should == :zmq
236
+ end
237
+ end
207
238
 
208
- end
239
+ end
209
240
 
210
- end
241
+ end
211
242
 
212
243
  end
@@ -10,20 +10,23 @@ describe Protobuf::Rpc::Connectors::Common do
10
10
  end
11
11
  end
12
12
 
13
- subject{ @subject ||= common_class.new({}) }
13
+ let(:subject_options) { {} }
14
+
15
+ subject { @subject ||= common_class.new(subject_options) }
14
16
 
15
17
  context "API" do
16
- specify{ subject.respond_to?(:any_callbacks?).should be_true }
17
- specify{ subject.respond_to?(:data_callback).should be_true }
18
- specify{ subject.respond_to?(:error).should be_true }
19
- specify{ subject.respond_to?(:fail).should be_true }
20
- specify{ subject.respond_to?(:complete).should be_true }
21
- specify{ subject.respond_to?(:parse_response).should be_true }
22
- specify{ subject.respond_to?(:verify_options).should be_true }
23
- specify{ subject.respond_to?(:verify_callbacks).should be_true }
18
+ specify { subject.respond_to?(:any_callbacks?).should be_true }
19
+ specify { subject.respond_to?(:request_caller).should be_true }
20
+ specify { subject.respond_to?(:data_callback).should be_true }
21
+ specify { subject.respond_to?(:error).should be_true }
22
+ specify { subject.respond_to?(:fail).should be_true }
23
+ specify { subject.respond_to?(:complete).should be_true }
24
+ specify { subject.respond_to?(:parse_response).should be_true }
25
+ specify { subject.respond_to?(:verify_options!).should be_true }
26
+ specify { subject.respond_to?(:verify_callbacks).should be_true }
24
27
  end
25
28
 
26
- context "#any_callbacks?" do
29
+ describe "#any_callbacks?" do
27
30
 
28
31
  [:@complete_cb, :@success_cb, :@failure_cb].each do |cb|
29
32
  it "returns true if #{cb} is provided" do
@@ -42,7 +45,19 @@ describe Protobuf::Rpc::Connectors::Common do
42
45
 
43
46
  end
44
47
 
45
- context "#data_callback" do
48
+ describe '#request_caller' do
49
+ its(:request_caller) { should eq ::Protobuf.client_host }
50
+
51
+ context 'when "client_host" option is given to initializer' do
52
+ let(:hostname) { 'myhost.myserver.com' }
53
+ let(:subject_options) { { :client_host => hostname } }
54
+
55
+ its(:request_caller) { should_not eq ::Protobuf.client_host }
56
+ its(:request_caller) { should eq hostname }
57
+ end
58
+ end
59
+
60
+ describe "#data_callback" do
46
61
  it "changes state to use the data callback" do
47
62
  subject.data_callback("data")
48
63
  subject.instance_variable_get(:@used_data_callback).should be_true
@@ -54,7 +69,28 @@ describe Protobuf::Rpc::Connectors::Common do
54
69
  end
55
70
  end
56
71
 
57
- context "#verify_callbacks" do
72
+ describe '#request_bytes' do
73
+ let(:service) { Test::ResourceService }
74
+ let(:method) { :find }
75
+ let(:request) { '' }
76
+ let(:client_host) { 'myhost.myservice.com' }
77
+ let(:subject_options) { { :service => service,
78
+ :method => method,
79
+ :request => request,
80
+ :client_host => client_host } }
81
+
82
+ let(:expected) { ::Protobuf::Socketrpc::Request.new({ :service_name => service.name,
83
+ :method_name => 'find',
84
+ :request_proto => '',
85
+ :caller => client_host }) }
86
+
87
+ before { subject.stub(:validate_request_type!).and_return(true) }
88
+ before { subject.should_not_receive(:fail) }
89
+
90
+ its(:request_bytes) { should eq expected.serialize_to_string }
91
+ end
92
+
93
+ describe "#verify_callbacks" do
58
94
 
59
95
  it "sets @failure_cb to #data_callback when no callbacks are defined" do
60
96
  subject.verify_callbacks
@@ -3,6 +3,22 @@ require 'protobuf'
3
3
 
4
4
  describe ::Protobuf do
5
5
 
6
+ describe '.client_host' do
7
+ after { ::Protobuf.instance_variable_set(:@_client_host, nil) }
8
+
9
+ subject { ::Protobuf.client_host }
10
+
11
+ context 'when client_host is not pre-configured' do
12
+ it { should eq `hostname`.chomp }
13
+ end
14
+
15
+ context 'when client_host is pre-configured' do
16
+ let(:hostname) { 'override.myhost.com' }
17
+ before { ::Protobuf.client_host = hostname }
18
+ it { should eq hostname }
19
+ end
20
+ end
21
+
6
22
  describe '.connector_type' do
7
23
  before { described_class.instance_variable_set(:@_connector_type, nil) }
8
24
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: protobuf
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 2.5.0
5
+ version: 2.5.2
6
6
  platform: java
7
7
  authors:
8
8
  - BJ Neilsen
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2012-11-28 00:00:00 Z
14
+ date: 2012-12-05 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -338,7 +338,6 @@ files:
338
338
  - lib/protobuf/version.rb
339
339
  - lib/protobuf/wire_type.rb
340
340
  - lib/protobuf/zmq.rb
341
- - proto/rpc.pb.rb
342
341
  - proto/rpc.proto
343
342
  - protobuf.gemspec
344
343
  - spec/benchmark/tasks.rb
@@ -1,48 +0,0 @@
1
- ##
2
- # This file is auto-generated. DO NOT EDIT!
3
- #
4
- require 'protobuf/message'
5
-
6
- module Protobuf
7
- module Socketrpc
8
- ##
9
- # Enum Classes
10
- #
11
- class ErrorReason < ::Protobuf::Enum; end
12
-
13
- ##
14
- # Message Classes
15
- #
16
- class Request < ::Protobuf::Message; end
17
- class Response < ::Protobuf::Message; end
18
-
19
- ##
20
- # Enum Values
21
- #
22
- ::Protobuf::Socketrpc::ErrorReason.define :BAD_REQUEST_DATA, 0
23
- ::Protobuf::Socketrpc::ErrorReason.define :BAD_REQUEST_PROTO, 1
24
- ::Protobuf::Socketrpc::ErrorReason.define :SERVICE_NOT_FOUND, 2
25
- ::Protobuf::Socketrpc::ErrorReason.define :METHOD_NOT_FOUND, 3
26
- ::Protobuf::Socketrpc::ErrorReason.define :RPC_ERROR, 4
27
- ::Protobuf::Socketrpc::ErrorReason.define :RPC_FAILED, 5
28
- ::Protobuf::Socketrpc::ErrorReason.define :INVALID_REQUEST_PROTO, 6
29
- ::Protobuf::Socketrpc::ErrorReason.define :BAD_RESPONSE_PROTO, 7
30
- ::Protobuf::Socketrpc::ErrorReason.define :UNKNOWN_HOST, 8
31
- ::Protobuf::Socketrpc::ErrorReason.define :IO_ERROR, 9
32
-
33
-
34
- ##
35
- # Message Fields
36
- #
37
- ::Protobuf::Socketrpc::Request.required(::Protobuf::Field::StringField, :service_name, 1)
38
- ::Protobuf::Socketrpc::Request.required(::Protobuf::Field::StringField, :method_name, 2)
39
- ::Protobuf::Socketrpc::Request.optional(::Protobuf::Field::BytesField, :request_proto, 3)
40
-
41
- ::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::BytesField, :response_proto, 1)
42
- ::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::StringField, :error, 2)
43
- ::Protobuf::Socketrpc::Response.optional(::Protobuf::Field::BoolField, :callback, 3, :default => false)
44
- ::Protobuf::Socketrpc::Response.optional(::Protobuf::Socketrpc::ErrorReason, :error_reason, 4)
45
-
46
-
47
- end
48
- end