Sha256: bf64be74f3917ce1a6dd2c0b1abd80953579919b1110dbde2c18a7b55a6a2315

Contents?: true

Size: 1.14 KB

Versions: 16

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

module ThemeCheck
  module LanguageServer
    # How you'd use this class:
    #
    # In thread #1:
    #   def foo
    #     chan = Channel.create
    #     send_request(chan.id, ...)
    #     result = chan.pop
    #     do_stuff_with_result(result)
    #   ensure
    #     chan.close
    #   end
    #
    # In thread #2:
    #   Channel.by_id(id) << result
    class Channel
      MUTEX = Mutex.new
      CHANNELS = {}

      class << self
        def create
          id = new_id
          CHANNELS[id] = new(id)
          CHANNELS[id]
        end

        def by_id(id)
          CHANNELS[id]
        end

        def close(id)
          CHANNELS.delete(id)
        end

        private

        def new_id
          MUTEX.synchronize do
            @id ||= 0
            @id += 1
          end
        end
      end

      attr_reader :id

      def initialize(id)
        @id = id
        @response = SizedQueue.new(1)
      end

      def pop
        @response.pop
      end

      def <<(value)
        @response << value
      end

      def close
        @response.close
        Channel.close(id)
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
theme-check-1.15.0 lib/theme_check/language_server/channel.rb
theme-check-1.14.0 lib/theme_check/language_server/channel.rb
theme-check-1.13.0 lib/theme_check/language_server/channel.rb
theme-check-1.12.1 lib/theme_check/language_server/channel.rb
theme-check-1.12.0 lib/theme_check/language_server/channel.rb
theme-check-1.11.0 lib/theme_check/language_server/channel.rb
theme-check-1.10.3 lib/theme_check/language_server/channel.rb
theme-check-1.10.2 lib/theme_check/language_server/channel.rb
theme-check-1.10.1 lib/theme_check/language_server/channel.rb
theme-check-1.10.0 lib/theme_check/language_server/channel.rb
theme-check-1.9.2 lib/theme_check/language_server/channel.rb
theme-check-1.9.1 lib/theme_check/language_server/channel.rb
theme-check-1.9.0 lib/theme_check/language_server/channel.rb
theme-check-1.8.0 lib/theme_check/language_server/channel.rb
theme-check-1.7.2 lib/theme_check/language_server/channel.rb
theme-check-1.7.1 lib/theme_check/language_server/channel.rb