Class: Msnav::Server
- Inherits:
-
Object
- Object
- Msnav::Server
- 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
-
#initialize(cfg, host: "127.0.0.1", port: 8787, service_root: nil, service_name: nil) ⇒ Server
constructor
A new instance of Server.
- #start ⇒ Object
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
#start ⇒ Object
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.}" 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 |