Class: ChefZero::SocketlessServerMap

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/chef_zero/socketless_server_map.rb

Constant Summary collapse

MUTEX =
Mutex.new

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSocketlessServerMap

Returns a new instance of SocketlessServerMap.



45
46
47
# File 'lib/chef_zero/socketless_server_map.rb', line 45

def initialize
  reset!
end

Class Method Details

.request(port, request_env) ⇒ Object



33
34
35
# File 'lib/chef_zero/socketless_server_map.rb', line 33

def self.request(port, request_env)
  instance.request(port, request_env)
end

.server_on_port(port) ⇒ Object



37
38
39
# File 'lib/chef_zero/socketless_server_map.rb', line 37

def self.server_on_port(port)
  instance.server_on_port(port)
end

Instance Method Details

#deregister(port) ⇒ Object



79
80
81
82
83
# File 'lib/chef_zero/socketless_server_map.rb', line 79

def deregister(port)
  MUTEX.synchronize do
    @servers_by_port.delete(port)
  end
end

#has_server_on_port?(port) ⇒ Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/chef_zero/socketless_server_map.rb', line 71

def has_server_on_port?(port)
  @servers_by_port.key?(port)
end

#register_no_listen_server(server) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/chef_zero/socketless_server_map.rb', line 59

def register_no_listen_server(server)
  MUTEX.synchronize do
    1.upto(1000) do |port|
      unless @servers_by_port.key?(port)
        @servers_by_port[port] = server
        return port
      end
    end
    raise NoSocketlessPortAvailable, "No socketless ports left to register"
  end
end

#register_port(port, server) ⇒ Object



53
54
55
56
57
# File 'lib/chef_zero/socketless_server_map.rb', line 53

def register_port(port, server)
  MUTEX.synchronize do
    @servers_by_port[port] = server
  end
end

#request(port, request_env) ⇒ Object

Raises:



85
86
87
88
89
90
# File 'lib/chef_zero/socketless_server_map.rb', line 85

def request(port, request_env)
  server = @servers_by_port[port]
  raise ServerNotFound, "No socketless #{ChefZero::Dist::PRODUCT} server on given port #{port.inspect}" unless server

  server.handle_socketless_request(request_env)
end

#reset!Object



49
50
51
# File 'lib/chef_zero/socketless_server_map.rb', line 49

def reset!
  @servers_by_port = {}
end

#server_on_port(port) ⇒ Object



75
76
77
# File 'lib/chef_zero/socketless_server_map.rb', line 75

def server_on_port(port)
  @servers_by_port[port]
end