Class: Gitdocs::Server

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(manager, port = 8888, repositories) ⇒ Server

Returns a new instance of Server.



9
10
11
12
13
14
# File 'lib/gitdocs/server.rb', line 9

def initialize(manager, port = 8888, repositories)
  @manager      = manager
  @port         = port.to_i
  @repositories = repositories
  @search       = Gitdocs::Search.new(repositories)
end

Class Method Details

.start_and_wait(manager, override_port, repositories) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/gitdocs/server.rb', line 16

def self.start_and_wait(manager, override_port, repositories)
  return false unless manager.start_web_frontend

  web_port = override_port || manager.web_frontend_port
  server = Server.new(manager, web_port, repositories)
  server.start
  server.wait_for_start
  true
end

Instance Method Details

#startObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/gitdocs/server.rb', line 26

def start
  Gitdocs::SettingsApp.set :manager, @manager
  Gitdocs::BrowserApp.set :repositories, @repositories

  Thin::Logging.debug = @manager.debug
  Thin::Server.start('127.0.0.1', @port) do
    use Rack::Static,
      urls: %w(/css /js /img /doc),
      root: File.expand_path('../public', __FILE__)
    use Rack::MethodOverride

    map('/settings') { run Gitdocs::SettingsApp }
    map('/') { run Gitdocs::BrowserApp }
  end
end

#wait_for_startObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/gitdocs/server.rb', line 42

def wait_for_start
  wait_for_web_server = proc do
    i = 0
    begin
      TCPSocket.open('127.0.0.1', @port).close
      @manager.log('Web server running!')
    rescue Errno::ECONNREFUSED
      sleep 0.2
      i += 1
      if i <= 20
        @manager.log('Retrying web server loop...')
        retry
      else
        @manager.log('Web server failed to start')
      end
    end
  end
  EM.defer(wait_for_web_server)
end