Class: GrpcKit::Rpcs::Client::RequestResponse

Inherits:
GrpcKit::Rpcs::ClientRpc show all
Defined in:
lib/grpc_kit/rpcs/client_request_response.rb

Instance Attribute Summary

Attributes inherited from GrpcKit::Rpcs::ClientRpc

#config

Instance Method Summary collapse

Methods inherited from GrpcKit::Rpcs::ClientRpc

#initialize

Constructor Details

This class inherits a constructor from GrpcKit::Rpcs::ClientRpc

Instance Method Details

#invoke(stream, request, metadata: {}, timeout: nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/grpc_kit/rpcs/client_request_response.rb', line 9

def invoke(stream, request, metadata: {}, timeout: nil)
  call = GrpcKit::Calls::Client::RequestResponse.new(
    metadata: ,
    config: @config,
    timeout: timeout,
    stream: stream,
  )

  # TODO: DRY
  if @config.interceptor && timeout
    @config.interceptor.intercept(request, call, call.) do |r, c, _|
      Timeout.timeout(timeout.to_f, GrpcKit::Errors::DeadlineExceeded) do
        call.send_msg(request, timeout: timeout.to_s, last: true)
        call.recv(last: true)
      end
    end
  elsif @config.interceptor && !timeout
    @config.interceptor.intercept(request, call, call.) do |r, c, _|
      call.send_msg(request, last: true)
      call.recv(last: true)
    end
  elsif !@config.interceptor && timeout
    Timeout.timeout(timeout.to_f, GrpcKit::Errors::DeadlineExceeded) do
      call.send_msg(request, timeout: timeout.to_s, last: true)
      call.recv(last: true)
    end
  else
    call.send_msg(request, last: true)
    call.recv(last: true)
  end
end