Class: LspRouter::ClientSide

Inherits:
Object
  • Object
show all
Defined in:
lib/lsp_router/client_side.rb

Overview

client side

Instance Method Summary collapse

Constructor Details

#initialize(rio, wio, logger:) ⇒ ClientSide



7
8
9
10
11
# File 'lib/lsp_router/client_side.rb', line 7

def initialize(rio, wio, logger:)
  @logger = logger
  @rio = rio
  @wio = wio
end

Instance Method Details

#log(prefix, data) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/lsp_router/client_side.rb', line 39

def log(prefix, data)
  if data['id'] && data['method']
    @logger.debug "#{prefix}[REQUEST] id:#{data['id']} method:#{data['method']}"
  elsif data['id']
    @logger.debug "#{prefix}[RESPONSE] id:#{data['id']}"
  else
    @logger.debug "#{prefix}[NOTIFICATION] method:#{data['method']}"
  end
  @logger.debug data.inspect
end

#readHash



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/lsp_router/client_side.rb', line 14

def read
  header = @rio.gets("\r\n\r\n")
  return unless header
  fields = header.lines.map do |line|
    n, v = line.chomp.split(/: */, 2)
    [n.downcase, v] if n
  end.compact.to_h
  ret = @rio.read(fields['content-length'].to_i)
  return unless ret
  data = JSON.parse(ret)
  log('client>', data)
  data
end

#write(data) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/lsp_router/client_side.rb', line 29

def write(data)
  log('client<', data)
  json = data.to_json
  @wio.puts "Content-Length: #{json.bytesize}\r\n\r\n"
  @wio.write(json)
  @wio.flush
end