module Asciidoctor::Diagram::OfficeServer

@private

Public Class Methods

is_port_open?() click to toggle source
# File lib/asciidoctor-diagram-office/extension.rb, line 28
def self.is_port_open?()
  begin
    Timeout::timeout(10) do
      begin
        s = TCPSocket.open('localhost', 2002)
        s.close
        return true
      rescue
        sleep(1)
        retry
      end
    end
  rescue Timeout::Error
    raise 'Failed to start office listener'
  end
end
listen() click to toggle source
# File lib/asciidoctor-diagram-office/extension.rb, line 12
def self.listen
  unless defined?(@office_listener) && @office_listener
    pid = spawn('unoconv --listener > /dev/null 2>&1')
    thr = Process.detach(pid)
    is_port_open?

    at_exit do
      begin
        Process.kill(:TERM, pid)
      rescue => e
      end
    end
    @office_listener = true
  end
end