Sha256: 7c284a0e47b380fcc06b9c7a6298a496ef92e6d530e4e92d558c9216539577e5

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

# frozen_string_literal: true

require 'grpc_kit/rpcs/base'

module GrpcKit
  module Rpcs
    module Client
      class RequestResponse < Base
        def invoke(session, request, authority:, metadata: {}, timeout: nil, **opts)
          cs = GrpcKit::Streams::Client.new(path: @config.path, protobuf: @config.protobuf, session: session, authority: authority)

          call = GrpcKit::Rpcs::Call.new(metadata, @config.method_name, @config.service_name, cs)
          @config.interceptor.intercept(request, call, metadata) do |r, c, m|
            if timeout
              # XXX: when timeout.to_timeout is 0
              Timeout.timeout(timeout.to_timeout, GrpcKit::Errors::DeadlienExceeded) do
                c.send_msg(r, timeout: timeout.to_s, metadata: m, last: true)
                c.recv(last: true)
              end
            else
              c.send_msg(r, metadata: m, last: true)
              c.recv(last: true)
            end
          end
        end
      end
    end

    module Server
      class RequestResponse < Base
        def invoke(stream, session)
          ss = GrpcKit::Streams::Server.new(stream: stream, protobuf: @config.protobuf, session: session)
          call = GrpcKit::Rpcs::Call.new(stream.headers.metadata, @config.method_name, @config.service_name, ss)

          request = ss.recv(last: true)
          resp =
            if @config.interceptor
              @config.interceptor.intercept(request, call) do |req, c|
                @handler.send(@config.ruby_style_method_name, req, c)
              end
            else
              @handler.send(@config.ruby_style_method_name, request, call)
            end

          ss.send_msg(resp, last: true)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
grpc_kit-0.1.2 lib/grpc_kit/rpcs/request_response.rb
grpc_kit-0.1.1 lib/grpc_kit/rpcs/request_response.rb