grpc_kit 0.1.8 → 0.1.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/examples/helloworld_client.rb +1 -1
- data/examples/routeguide_client.rb +33 -0
- data/examples/routeguide_server.rb +17 -0
- data/lib/grpc.rb +2 -1
- data/lib/grpc_kit.rb +4 -1
- data/lib/grpc_kit/calls.rb +17 -3
- data/lib/grpc_kit/calls/client_bidi_streamer.rb +63 -0
- data/lib/grpc_kit/calls/client_client_streamer.rb +8 -4
- data/lib/grpc_kit/calls/client_request_response.rb +7 -4
- data/lib/grpc_kit/calls/client_server_streamer.rb +7 -4
- data/lib/grpc_kit/calls/server_bidi_streamer.rb +43 -0
- data/lib/grpc_kit/calls/server_client_streamer.rb +5 -1
- data/lib/grpc_kit/calls/server_request_response.rb +5 -1
- data/lib/grpc_kit/calls/server_server_streamer.rb +5 -1
- data/lib/grpc_kit/client.rb +22 -4
- data/lib/grpc_kit/errors.rb +25 -11
- data/lib/grpc_kit/grpc/dsl.rb +17 -2
- data/lib/grpc_kit/grpc/generic_service.rb +0 -13
- data/lib/grpc_kit/grpc/interceptor.rb +27 -0
- data/lib/grpc_kit/grpc/logger.rb +4 -1
- data/lib/grpc_kit/grpc_time.rb +3 -1
- data/lib/grpc_kit/interceptors.rb +3 -0
- data/lib/grpc_kit/interceptors/client_bidi_streamer.rb +20 -0
- data/lib/grpc_kit/interceptors/client_client_streamer.rb +3 -0
- data/lib/grpc_kit/interceptors/client_request_response.rb +3 -0
- data/lib/grpc_kit/interceptors/client_server_streamer.rb +3 -0
- data/lib/grpc_kit/interceptors/server_bidi_streamer.rb +17 -0
- data/lib/grpc_kit/interceptors/server_client_streamer.rb +2 -0
- data/lib/grpc_kit/interceptors/server_request_response.rb +2 -0
- data/lib/grpc_kit/interceptors/server_server_streamer.rb +2 -0
- data/lib/grpc_kit/protobuffer.rb +8 -0
- data/lib/grpc_kit/rpc_desc.rb +21 -4
- data/lib/grpc_kit/rpcs.rb +4 -0
- data/lib/grpc_kit/rpcs/client_bidi_streamer.rb +20 -1
- data/lib/grpc_kit/rpcs/client_client_streamer.rb +5 -0
- data/lib/grpc_kit/rpcs/client_request_response.rb +11 -17
- data/lib/grpc_kit/rpcs/client_server_streamer.rb +5 -0
- data/lib/grpc_kit/rpcs/server_bidi_streamer.rb +17 -0
- data/lib/grpc_kit/rpcs/server_client_streamer.rb +3 -0
- data/lib/grpc_kit/rpcs/server_request_response.rb +3 -0
- data/lib/grpc_kit/rpcs/server_server_streamer.rb +3 -0
- data/lib/grpc_kit/server.rb +12 -4
- data/lib/grpc_kit/session/client_session.rb +7 -2
- data/lib/grpc_kit/session/drain_controller.rb +2 -0
- data/lib/grpc_kit/session/headers.rb +11 -0
- data/lib/grpc_kit/session/io.rb +9 -0
- data/lib/grpc_kit/session/recv_buffer.rb +7 -0
- data/lib/grpc_kit/session/send_buffer.rb +8 -0
- data/lib/grpc_kit/session/server_session.rb +8 -5
- data/lib/grpc_kit/session/stream.rb +17 -3
- data/lib/grpc_kit/session/stream_status.rb +7 -1
- data/lib/grpc_kit/stream/client_stream.rb +55 -9
- data/lib/grpc_kit/stream/server_stream.rb +19 -1
- data/lib/grpc_kit/transport/client_transport.rb +39 -3
- data/lib/grpc_kit/transport/packable.rb +9 -3
- data/lib/grpc_kit/transport/server_transport.rb +15 -2
- data/lib/grpc_kit/version.rb +1 -1
- metadata +6 -3
- data/TODO.md +0 -71
data/lib/grpc_kit/protobuffer.rb
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
module GrpcKit
|
4
4
|
class ProtoBuffer
|
5
|
+
# @param encoder [Class, GrpcKit::GRPC::Stream]
|
6
|
+
# @param decoder [Class, GrpcKit::GRPC::Stream]
|
7
|
+
# @param encode_method [Symbol]
|
8
|
+
# @param decode_method [Symbol]
|
5
9
|
def initialize(encoder:, decoder:, encode_method:, decode_method:)
|
6
10
|
@encoder = encoder
|
7
11
|
@decoder = decoder
|
@@ -9,10 +13,14 @@ module GrpcKit
|
|
9
13
|
@decode_method = decode_method
|
10
14
|
end
|
11
15
|
|
16
|
+
# @param data [String]
|
17
|
+
# @return [void]
|
12
18
|
def encode(data)
|
13
19
|
@encoder.send(@encode_method, data)
|
14
20
|
end
|
15
21
|
|
22
|
+
# @param data [String]
|
23
|
+
# @return [void]
|
16
24
|
def decode(data)
|
17
25
|
@decoder.send(@decode_method, data)
|
18
26
|
end
|
data/lib/grpc_kit/rpc_desc.rb
CHANGED
@@ -6,7 +6,7 @@ require 'grpc_kit/protobuffer'
|
|
6
6
|
require 'grpc_kit/interceptors/client_request_response'
|
7
7
|
require 'grpc_kit/interceptors/client_client_streamer'
|
8
8
|
require 'grpc_kit/interceptors/client_server_streamer'
|
9
|
-
|
9
|
+
require 'grpc_kit/interceptors/client_bidi_streamer'
|
10
10
|
require 'grpc_kit/rpcs/client_request_response'
|
11
11
|
require 'grpc_kit/rpcs/client_client_streamer'
|
12
12
|
require 'grpc_kit/rpcs/client_server_streamer'
|
@@ -15,7 +15,7 @@ require 'grpc_kit/rpcs/client_bidi_streamer'
|
|
15
15
|
require 'grpc_kit/interceptors/server_request_response'
|
16
16
|
require 'grpc_kit/interceptors/server_client_streamer'
|
17
17
|
require 'grpc_kit/interceptors/server_server_streamer'
|
18
|
-
|
18
|
+
require 'grpc_kit/interceptors/server_bidi_streamer'
|
19
19
|
require 'grpc_kit/rpcs/server_request_response'
|
20
20
|
require 'grpc_kit/rpcs/server_client_streamer'
|
21
21
|
require 'grpc_kit/rpcs/server_server_streamer'
|
@@ -23,6 +23,12 @@ require 'grpc_kit/rpcs/server_bidi_streamer'
|
|
23
23
|
|
24
24
|
module GrpcKit
|
25
25
|
class RpcDesc
|
26
|
+
# @param name [Symbol] path name
|
27
|
+
# @param marshal [Class, GrpcKit::GRPC::Stream] marshaling object
|
28
|
+
# @param unmarshal [Class, GrpcKit::GRPC::Stream] unmarshaling object
|
29
|
+
# @param marshal_method [Symbol] method name of marshaling which marshal is called this method
|
30
|
+
# @param unmarshal_method [Symbol] method name of unmarshaling which unmarshal is called this method
|
31
|
+
# @param service_name [String]
|
26
32
|
def initialize(name:, marshal:, unmarshal:, marshal_method:, unmarshal_method:, service_name:)
|
27
33
|
@name = name
|
28
34
|
@marshal = marshal
|
@@ -32,6 +38,9 @@ module GrpcKit
|
|
32
38
|
@service_name = service_name
|
33
39
|
end
|
34
40
|
|
41
|
+
# @param handler [GrpcKit::GRPC::GenericService]
|
42
|
+
# @param interceptors [Array<GrpcKit::GRPC::ServerInterceptor>]
|
43
|
+
# @return [#invoke] Server version of rpc class
|
35
44
|
def build_server(handler, interceptors: [])
|
36
45
|
inter = interceptors.empty? ? nil : server_interceptor.new(interceptors)
|
37
46
|
|
@@ -46,6 +55,8 @@ module GrpcKit
|
|
46
55
|
server.new(handler, config)
|
47
56
|
end
|
48
57
|
|
58
|
+
# @param interceptors [Array<GrpcKit::GRPC::ClientInterceptor>]
|
59
|
+
# @return [#invoke] Client version of rpc class
|
49
60
|
def build_client(interceptors: [])
|
50
61
|
inter = interceptors.empty? ? nil : client_interceptor.new(interceptors)
|
51
62
|
|
@@ -60,26 +71,32 @@ module GrpcKit
|
|
60
71
|
client.new(config)
|
61
72
|
end
|
62
73
|
|
74
|
+
# @return [Symbol] Snake case name
|
63
75
|
def ruby_style_name
|
64
76
|
@ruby_style_name ||= to_underscore(@name).to_sym
|
65
77
|
end
|
66
78
|
|
79
|
+
# @return [String] Full name of path name
|
67
80
|
def path
|
68
81
|
@path ||= "/#{@service_name}/#{@name}"
|
69
82
|
end
|
70
83
|
|
84
|
+
# @return [Boolean]
|
71
85
|
def request_response?
|
72
86
|
!@marshal.is_a?(GrpcKit::GRPC::Stream) && !@unmarshal.is_a?(GrpcKit::GRPC::Stream)
|
73
87
|
end
|
74
88
|
|
89
|
+
# @return [Boolean]
|
75
90
|
def client_streamer?
|
76
91
|
@marshal.is_a?(GrpcKit::GRPC::Stream) && !@unmarshal.is_a?(GrpcKit::GRPC::Stream)
|
77
92
|
end
|
78
93
|
|
94
|
+
# @return [Boolean]
|
79
95
|
def server_streamer?
|
80
96
|
!@marshal.is_a?(GrpcKit::GRPC::Stream) && @unmarshal.is_a?(GrpcKit::GRPC::Stream)
|
81
97
|
end
|
82
98
|
|
99
|
+
# @return [Boolean]
|
83
100
|
def bidi_streamer?
|
84
101
|
@marshal.is_a?(GrpcKit::GRPC::Stream) && @unmarshal.is_a?(GrpcKit::GRPC::Stream)
|
85
102
|
end
|
@@ -138,7 +155,7 @@ module GrpcKit
|
|
138
155
|
elsif server_streamer?
|
139
156
|
GrpcKit::Interceptors::Server::ServerStreamer
|
140
157
|
elsif bidi_streamer?
|
141
|
-
GrpcKit::Interceptors::Server::
|
158
|
+
GrpcKit::Interceptors::Server::BidiStreamer
|
142
159
|
end
|
143
160
|
end
|
144
161
|
|
@@ -150,7 +167,7 @@ module GrpcKit
|
|
150
167
|
elsif server_streamer?
|
151
168
|
GrpcKit::Interceptors::Client::ServerStreamer
|
152
169
|
elsif bidi_streamer?
|
153
|
-
GrpcKit::Interceptors::Client::
|
170
|
+
GrpcKit::Interceptors::Client::BidiStreamer
|
154
171
|
end
|
155
172
|
end
|
156
173
|
|
data/lib/grpc_kit/rpcs.rb
CHANGED
@@ -7,8 +7,10 @@ require 'grpc_kit/status_codes'
|
|
7
7
|
module GrpcKit
|
8
8
|
module Rpcs
|
9
9
|
class ClientRpc
|
10
|
+
# @return [GrpcKit::MethodConfig]
|
10
11
|
attr_reader :config
|
11
12
|
|
13
|
+
# @param config [GrpcKit::MethodConfig]
|
12
14
|
def initialize(config)
|
13
15
|
@config = config
|
14
16
|
end
|
@@ -17,6 +19,8 @@ module GrpcKit
|
|
17
19
|
end
|
18
20
|
|
19
21
|
class ServerRpc
|
22
|
+
# @param handler [GrpcKit::GRPC::GenericService]
|
23
|
+
# @param config [GrpcKit::MethodConfig]
|
20
24
|
def initialize(handler, config)
|
21
25
|
@handler = handler
|
22
26
|
@config = config
|
@@ -1,11 +1,30 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'grpc_kit/rpcs'
|
4
|
+
require 'grpc_kit/calls/client_bidi_streamer'
|
4
5
|
|
5
6
|
module GrpcKit
|
6
7
|
module Rpcs::Client
|
7
8
|
class BidiStreamer < GrpcKit::Rpcs::ClientRpc
|
8
|
-
|
9
|
+
# @param stream [GrpcKit::Stream::ClientStream]
|
10
|
+
# @param _requests [Object] it's for compatibility, no use
|
11
|
+
# @param metadata [Hash<String, String>]
|
12
|
+
# @param timeout [GrpcKit::GrpcTime]
|
13
|
+
# @return [GrpcKit::Calls::Client::BidiStreamer]
|
14
|
+
def invoke(stream, _requests, metadata: {}, timeout: nil)
|
15
|
+
call = GrpcKit::Calls::Client::BidiStreamer.new(
|
16
|
+
metadata: metadata,
|
17
|
+
config: @config,
|
18
|
+
timeout: timeout,
|
19
|
+
stream: stream,
|
20
|
+
)
|
21
|
+
|
22
|
+
if @config.interceptor
|
23
|
+
@config.interceptor.intercept(call, metadata) { |s| s }
|
24
|
+
else
|
25
|
+
call
|
26
|
+
end
|
27
|
+
end
|
9
28
|
end
|
10
29
|
end
|
11
30
|
end
|
@@ -6,6 +6,11 @@ require 'grpc_kit/calls/client_client_streamer'
|
|
6
6
|
module GrpcKit
|
7
7
|
module Rpcs::Client
|
8
8
|
class ClientStreamer < GrpcKit::Rpcs::ClientRpc
|
9
|
+
# @param stream [GrpcKit::Stream::ClientStream]
|
10
|
+
# @param _request [nil] No use
|
11
|
+
# @param metadata [Hash<String, String>]
|
12
|
+
# @param timeout [GrpcKit::GrpcTime]
|
13
|
+
# @return [GrpcKit::Calls::Client::ClientStreamer]
|
9
14
|
def invoke(stream, _request, metadata: {}, timeout: nil)
|
10
15
|
call = GrpcKit::Calls::Client::ClientStreamer.new(
|
11
16
|
metadata: metadata,
|
@@ -6,7 +6,12 @@ require 'grpc_kit/calls/client_request_response'
|
|
6
6
|
module GrpcKit
|
7
7
|
module Rpcs::Client
|
8
8
|
class RequestResponse < GrpcKit::Rpcs::ClientRpc
|
9
|
-
|
9
|
+
# @param stream [GrpcKit::Stream::ClientStream]
|
10
|
+
# @param request [Object] request message
|
11
|
+
# @param metadata [Hash<String, String>]
|
12
|
+
# @param timeout [GrpcKit::GrpcTime]
|
13
|
+
# @return [Object] response message
|
14
|
+
def invoke(stream, request, metadata: {}, timeout: nil)
|
10
15
|
call = GrpcKit::Calls::Client::RequestResponse.new(
|
11
16
|
metadata: metadata,
|
12
17
|
config: @config,
|
@@ -14,27 +19,16 @@ module GrpcKit
|
|
14
19
|
stream: stream,
|
15
20
|
)
|
16
21
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
call.send_msg(request, timeout: timeout.to_s, last: true)
|
22
|
+
Timeout.timeout(timeout&.to_f, GrpcKit::Errors::DeadlineExceeded) do
|
23
|
+
if @config.interceptor
|
24
|
+
@config.interceptor.intercept(request, call, call.metadata) do |r, c, _|
|
25
|
+
call.send_msg(request, last: true)
|
22
26
|
call.recv(last: true)
|
23
27
|
end
|
24
|
-
|
25
|
-
elsif @config.interceptor && !timeout
|
26
|
-
@config.interceptor.intercept(request, call, call.metadata) do |r, c, _|
|
28
|
+
else
|
27
29
|
call.send_msg(request, last: true)
|
28
30
|
call.recv(last: true)
|
29
31
|
end
|
30
|
-
elsif !@config.interceptor && timeout
|
31
|
-
Timeout.timeout(timeout.to_f, GrpcKit::Errors::DeadlineExceeded) do
|
32
|
-
call.send_msg(request, timeout: timeout.to_s, last: true)
|
33
|
-
call.recv(last: true)
|
34
|
-
end
|
35
|
-
else
|
36
|
-
call.send_msg(request, last: true)
|
37
|
-
call.recv(last: true)
|
38
32
|
end
|
39
33
|
end
|
40
34
|
end
|
@@ -6,6 +6,11 @@ require 'grpc_kit/calls/client_server_streamer'
|
|
6
6
|
module GrpcKit
|
7
7
|
module Rpcs::Client
|
8
8
|
class ServerStreamer < GrpcKit::Rpcs::ClientRpc
|
9
|
+
# @param stream [GrpcKit::Stream::ClientStream]
|
10
|
+
# @param request [Object] reqeust message
|
11
|
+
# @param metadata [Hash<String, String>]
|
12
|
+
# @param timeout [GrpcKit::GrpcTime]
|
13
|
+
# @return [GrpcKit::Calls::Client::ServerStreamer]
|
9
14
|
def invoke(stream, request, metadata: {}, timeout: nil)
|
10
15
|
call = GrpcKit::Calls::Client::ServerStreamer.new(metadata: metadata, config: @config, timeout: timeout, stream: stream)
|
11
16
|
|
@@ -1,10 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'grpc_kit/rpcs'
|
4
|
+
require 'grpc_kit/calls/server_bidi_streamer'
|
4
5
|
|
5
6
|
module GrpcKit
|
6
7
|
module Rpcs::Server
|
7
8
|
class BidiStreamer < GrpcKit::Rpcs::ServerRpc
|
9
|
+
# @param stream [GrpcKit::Stream::ServerStream]
|
10
|
+
# @param metadata [Hash<String, String>]
|
11
|
+
# @return [void]
|
12
|
+
def invoke(stream, metadata: {})
|
13
|
+
call = GrpcKit::Calls::Server::BidiStreamer.new(metadata: metadata, config: @config, stream: stream)
|
14
|
+
|
15
|
+
if @config.interceptor
|
16
|
+
@config.interceptor.intercept(call) do |c|
|
17
|
+
@handler.send(@config.ruby_style_method_name, c)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
@handler.send(@config.ruby_style_method_name, call)
|
21
|
+
end
|
22
|
+
|
23
|
+
stream.send_status
|
24
|
+
end
|
8
25
|
end
|
9
26
|
end
|
10
27
|
end
|
@@ -6,6 +6,9 @@ require 'grpc_kit/calls/server_client_streamer'
|
|
6
6
|
module GrpcKit
|
7
7
|
module Rpcs::Server
|
8
8
|
class ClientStreamer < GrpcKit::Rpcs::ServerRpc
|
9
|
+
# @param stream [GrpcKit::Stream::ServerStream]
|
10
|
+
# @param metadata [Hash<String, String>]
|
11
|
+
# @return [void]
|
9
12
|
def invoke(stream, metadata: {})
|
10
13
|
call = GrpcKit::Calls::Server::ClientStreamer.new(metadata: metadata, config: @config, stream: stream)
|
11
14
|
|
@@ -6,6 +6,9 @@ require 'grpc_kit/calls/server_request_response'
|
|
6
6
|
module GrpcKit
|
7
7
|
module Rpcs::Server
|
8
8
|
class RequestResponse < GrpcKit::Rpcs::ServerRpc
|
9
|
+
# @param stream [GrpcKit::Stream::ServerStream]
|
10
|
+
# @param metadata [Hash<String, String>]
|
11
|
+
# @return [void]
|
9
12
|
def invoke(stream, metadata: {})
|
10
13
|
call = GrpcKit::Calls::Server::RequestResponse.new(metadata: metadata, config: @config, stream: stream)
|
11
14
|
request = call.recv(last: true)
|
@@ -6,6 +6,9 @@ require 'grpc_kit/calls/server_server_streamer'
|
|
6
6
|
module GrpcKit
|
7
7
|
module Rpcs::Server
|
8
8
|
class ServerStreamer < GrpcKit::Rpcs::ServerRpc
|
9
|
+
# @param stream [GrpcKit::Stream::ServerStream]
|
10
|
+
# @param metadata [Hash<String, String>]
|
11
|
+
# @return [void]
|
9
12
|
def invoke(stream, metadata: {})
|
10
13
|
call = GrpcKit::Calls::Server::ServerStreamer.new(metadata: metadata, config: @config, stream: stream)
|
11
14
|
|
data/lib/grpc_kit/server.rb
CHANGED
@@ -5,6 +5,7 @@ require 'grpc_kit/session/server_session'
|
|
5
5
|
|
6
6
|
module GrpcKit
|
7
7
|
class Server
|
8
|
+
# @param interceptors [Array<GrpcKit::GRPC::ServerInterceptor>] list of interceptors
|
8
9
|
def initialize(interceptors: [])
|
9
10
|
@sessions = []
|
10
11
|
@rpc_descs = {}
|
@@ -16,6 +17,8 @@ module GrpcKit
|
|
16
17
|
GrpcKit.logger.debug("Launched grpc_kit(v#{GrpcKit::VERSION})")
|
17
18
|
end
|
18
19
|
|
20
|
+
# @param handler [GrpcKit::GRPC::GenericService] gRPC handler object or class
|
21
|
+
# @return [void]
|
19
22
|
def handle(handler)
|
20
23
|
klass = handler.is_a?(Class) ? handler : handler.class
|
21
24
|
unless klass.include?(GrpcKit::GRPC::GenericService)
|
@@ -32,6 +35,8 @@ module GrpcKit
|
|
32
35
|
end
|
33
36
|
end
|
34
37
|
|
38
|
+
# @param conn [TCPSocket]
|
39
|
+
# @return [void]
|
35
40
|
def run(conn)
|
36
41
|
raise 'Stopping server' if @stopping
|
37
42
|
|
@@ -41,8 +46,9 @@ module GrpcKit
|
|
41
46
|
end
|
42
47
|
end
|
43
48
|
|
49
|
+
# This method is expected to be called in trap context
|
50
|
+
# @return [void]
|
44
51
|
def force_shutdown
|
45
|
-
# expected to be called in trap context
|
46
52
|
Thread.new do
|
47
53
|
@mutex.synchronize do
|
48
54
|
GrpcKit.logger.debug('force shutdown')
|
@@ -52,8 +58,9 @@ module GrpcKit
|
|
52
58
|
end
|
53
59
|
end
|
54
60
|
|
61
|
+
# This method is expected to be called in trap context
|
62
|
+
# @return [void]
|
55
63
|
def graceful_shutdown
|
56
|
-
# expected to be called in trap context
|
57
64
|
Thread.new do
|
58
65
|
GrpcKit.logger.debug('graceful shutdown')
|
59
66
|
@mutex.synchronize { @sessions.each(&:drain) }
|
@@ -77,8 +84,9 @@ module GrpcKit
|
|
77
84
|
@mutex.synchronize { @sessions.size }
|
78
85
|
end
|
79
86
|
|
80
|
-
# @
|
81
|
-
# @
|
87
|
+
# @param path [String] gRPC method path
|
88
|
+
# @param stream [GrpcKit::Streams::ServerStream]
|
89
|
+
# @return [void]
|
82
90
|
def dispatch(path, stream)
|
83
91
|
rpc = @rpc_descs[path]
|
84
92
|
unless rpc
|
@@ -16,7 +16,8 @@ module GrpcKit
|
|
16
16
|
|
17
17
|
delegate %i[send_event recv_event] => :@io
|
18
18
|
|
19
|
-
# @
|
19
|
+
# @param io [GrpcKit::Session::IO]
|
20
|
+
# @param opts [Hash]
|
20
21
|
def initialize(io, opts = {})
|
21
22
|
super() # initialize DS9::Session
|
22
23
|
|
@@ -27,6 +28,8 @@ module GrpcKit
|
|
27
28
|
@stop = false
|
28
29
|
end
|
29
30
|
|
31
|
+
# @param headers [Hash<String,String>]
|
32
|
+
# @return [void]
|
30
33
|
def send_request(headers)
|
31
34
|
if @draining
|
32
35
|
raise ConnectionClosing, "You can't send new request. becuase this connection will shuting down"
|
@@ -40,7 +43,8 @@ module GrpcKit
|
|
40
43
|
stream
|
41
44
|
end
|
42
45
|
|
43
|
-
# @
|
46
|
+
# @param stream_id [Integer]
|
47
|
+
# @return [void]
|
44
48
|
def start(stream_id)
|
45
49
|
stream = @streams.fetch(stream_id)
|
46
50
|
|
@@ -56,6 +60,7 @@ module GrpcKit
|
|
56
60
|
shutdown
|
57
61
|
end
|
58
62
|
|
63
|
+
# @return [void]
|
59
64
|
def run_once
|
60
65
|
return if @stop
|
61
66
|
|
@@ -20,6 +20,7 @@ module GrpcKit
|
|
20
20
|
@metadata = {}
|
21
21
|
end
|
22
22
|
|
23
|
+
# @return [Hash<String,String>]
|
23
24
|
def metadata
|
24
25
|
@metadata =
|
25
26
|
if @metadata.empty?
|
@@ -31,34 +32,44 @@ module GrpcKit
|
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
35
|
+
# @return [String,nil]
|
34
36
|
def path
|
35
37
|
@opts[':path']
|
36
38
|
end
|
37
39
|
|
40
|
+
# @return [String,nil]
|
38
41
|
def grpc_status
|
39
42
|
@opts['grpc-status']
|
40
43
|
end
|
41
44
|
|
45
|
+
# @return [String,nil]
|
42
46
|
def grpc_encoding
|
43
47
|
@opts['grpc-encoding']
|
44
48
|
end
|
45
49
|
|
50
|
+
# @return [String,nil]
|
46
51
|
def content_type
|
47
52
|
@opts['content-type']
|
48
53
|
end
|
49
54
|
|
55
|
+
# @return [String,nil]
|
50
56
|
def status_message
|
51
57
|
@opts['grpc-message']
|
52
58
|
end
|
53
59
|
|
60
|
+
# @return [Time,nil]
|
54
61
|
def timeout
|
55
62
|
@timeout ||= @opts['grpc-timeout'] && GrpcTime.new(@opts['grpc-timeout'])
|
56
63
|
end
|
57
64
|
|
65
|
+
# @return [String,nil]
|
58
66
|
def http_status
|
59
67
|
@opts[':status']
|
60
68
|
end
|
61
69
|
|
70
|
+
# @param key [String]
|
71
|
+
# @param val [String]
|
72
|
+
# @return [void]
|
62
73
|
def add(key, val)
|
63
74
|
@opts[key] = val
|
64
75
|
end
|