Sha256: 29433a052429b473af45a3519457c16a3cc487e4d8371a2d4ff52c917766b86c

Contents?: true

Size: 1 KB

Versions: 4

Compression:

Stored size: 1 KB

Contents

require "json"

module LanguageServer
  module Protocol
    module Transport
      module Io
        class Reader
          def initialize(io)
            @io = io
          end

          def read(&block)
            buffer = ""
            header_parsed = false
            content_length = nil

            while char = io.getc
              buffer << char

              unless header_parsed
                if buffer[-4..-1] == "\r\n" * 2
                  content_length = buffer.match(/Content-Length: (\d+)/i)[1].to_i

                  header_parsed = true
                  buffer.clear
                end
              else
                if buffer.bytesize == content_length
                  request = JSON.parse(buffer, symbolize_names: true)

                  block.call(request)

                  header_parsed = false
                  buffer.clear
                end
              end
            end
          end

          private

          attr_reader :io
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
language_server-protocol-3.15.0.1 lib/language_server/protocol/transport/io/reader.rb
language_server-protocol-3.15.0.0 lib/language_server/protocol/transport/io/reader.rb
language_server-protocol-3.14.0.2 lib/language_server/protocol/transport/io/reader.rb
language_server-protocol-3.14.0.1 lib/language_server/protocol/transport/io/reader.rb