Sha256: 277b58b01eb4e0c076e8e5f53c69411444288390586be33dafb81c47f3ea9aee

Contents?: true

Size: 819 Bytes

Versions: 3

Compression:

Stored size: 819 Bytes

Contents

# frozen_string_literal: true

module GrpcKit
  module Session
    class ControlQueue
      def initialize(waker: proc { })
        @event_stream = Queue.new
        @waker = waker
      end

      # Be nonblocking
      def pop
        if @event_stream.empty?
          nil
        else
          @event_stream.pop(true)
        end
      rescue ThreadError => _
        nil
      end

      def submit_response(id, headers)
        @event_stream.push([:submit_response, id, headers])
        @waker.call(:submit_response)
      end

      def submit_headers(id, headers)
        @event_stream.push([:submit_headers, id, headers])
        @waker.call(:submit_headers)
      end

      def resume_data(id)
        @event_stream.push([:resume_data, id])
        @waker.call(:submit_response)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
grpc_kit-0.5.1 lib/grpc_kit/session/control_queue.rb
grpc_kit-0.5.0 lib/grpc_kit/session/control_queue.rb
grpc_kit-0.4.0 lib/grpc_kit/session/control_queue.rb