Sha256: fdf61756102ab61daf033ca31814cc76c21f04747f402831165567a4b0744088

Contents?: true

Size: 756 Bytes

Versions: 5

Compression:

Stored size: 756 Bytes

Contents

module PipeRpc
  class Hub
    class Requester
      def initialize(hub)
        @hub = hub
        @requests = {}
        @uid = 0
      end

      def next_uid
        @uid += 1
      end

      def notification(signature)
        Request.new(signature)
      end

      def request(signature, &on_response)
        request = Request.new(signature.merge(id: next_uid))
        @requests[request.id] = { request: request, on_response: on_response }
        request
      end

      def handle_response(response)
        request = @requests.delete(response.id)
        raise InternalError.new("no request for response(id: #{response.id})") unless request
        request[:on_response].call response.result_for(request[:request])
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
pipe_rpc-0.3.2 lib/pipe_rpc/hub/requester.rb
pipe_rpc-0.3.1 lib/pipe_rpc/hub/requester.rb
pipe_rpc-0.3.0 lib/pipe_rpc/hub/requester.rb
pipe_rpc-0.2.2 lib/pipe_rpc/hub/requester.rb
pipe_rpc-0.2.0 lib/pipe_rpc/hub/requester.rb