Class: Msnav::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/msnav/server.rb

Defined Under Namespace

Classes: HttpError

Constant Summary collapse

GENERATION_POLL_SECONDS =
1.0
EDITOR_ENV =

host editor CLI used to open a project folder at a position

"CODERAG_EDITOR"
DEFAULT_EDITOR =
"cursor"

Instance Method Summary collapse

Constructor Details

#initialize(cfg, host: "127.0.0.1", port: 8787, service_root: nil, service_name: nil) ⇒ Server

Returns a new instance of Server.



92
93
94
95
96
97
98
# File 'lib/msnav/server.rb', line 92

def initialize(cfg, host: "127.0.0.1", port: 8787,
               service_root: nil, service_name: nil)
  @holder = Holder.new(cfg, service_root: service_root,
                            service_name: service_name)
  @host = host
  @port = port
end

Instance Method Details

#startObject



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/msnav/server.rb', line 100

def start
  server = WEBrick::HTTPServer.new(
    BindAddress: @host, Port: @port, AccessLog: [],
    Logger: WEBrick::Log.new($stderr, WEBrick::Log::WARN))
  server.mount_proc("/") { |req, res| dispatch(req, res) }

  poller = Thread.new do
    loop do
      sleep GENERATION_POLL_SECONDS
      begin
        @holder.maybe_reload
      rescue StandardError => e # the poller must survive anything
        warn "msnav: reload check failed: #{e.message}"
      end
    end
  end

  %w[INT TERM].each { |sig| trap(sig) { server.shutdown } }
  puts "msnav daemon on http://#{@host}:#{@port}  " \
       "(navigation API for #{@holder.cfg.workspace_root})"
  server.start
ensure
  poller && poller.kill
end