Sha256: c814503bb005ad75ec4f2ba1aa6d7473f326d192ec9df71ac7a03d71fdf05954

Contents?: true

Size: 1.02 KB

Versions: 1

Compression:

Stored size: 1.02 KB

Contents

require "json"

module LanguageServer
  module Protocol
    module Transport
      module Io
        class Reader
          def initialize(io)
            @io = io
            io.binmode
          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

1 entries across 1 versions & 1 rubygems

Version Path
language_server-protocol-3.16.0.2 lib/language_server/protocol/transport/io/reader.rb