class Solargraph::LanguageServer::Host::MessageWorker

A serial worker Thread to handle message.

this make check pending message possible, and maybe cancelled to speedup process

Public Class Methods

new(host) click to toggle source

@param host [Host]

# File lib/solargraph/language_server/host/message_worker.rb, line 10
def initialize(host)
  @host = host
  @mutex = Mutex.new
  @resource = ConditionVariable.new
  @stopped = true
end

Public Instance Methods

messages() click to toggle source

pending handle messages

# File lib/solargraph/language_server/host/message_worker.rb, line 18
def messages
  @messages ||= []
end
queue(message) click to toggle source

@param message [Hash] The message should be handle. will pass back to Solargraph::LanguageServer::Host#receive @return [void]

# File lib/solargraph/language_server/host/message_worker.rb, line 32
def queue(message)
  @mutex.synchronize do
    messages.push(message)
    @resource.signal
  end
end
start() click to toggle source
# File lib/solargraph/language_server/host/message_worker.rb, line 39
def start
  return unless @stopped
  @stopped = false
  Thread.new do
    tick until stopped?
  end
end
stop() click to toggle source
# File lib/solargraph/language_server/host/message_worker.rb, line 26
def stop
  @stopped = true
end
stopped?() click to toggle source
# File lib/solargraph/language_server/host/message_worker.rb, line 22
def stopped?
  @stopped
end
tick() click to toggle source
# File lib/solargraph/language_server/host/message_worker.rb, line 47
def tick
  message = @mutex.synchronize do
    @resource.wait(@mutex) if messages.empty?
    messages.shift
  end
  handler = @host.receive(message)
  handler && handler.send_response
end