Class: ChefZero::SocketlessServerMap
- Inherits:
-
Object
- Object
- ChefZero::SocketlessServerMap
- 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
- #deregister(port) ⇒ Object
- #has_server_on_port?(port) ⇒ Boolean
-
#initialize ⇒ SocketlessServerMap
constructor
A new instance of SocketlessServerMap.
- #register_no_listen_server(server) ⇒ Object
- #register_port(port, server) ⇒ Object
- #request(port, request_env) ⇒ Object
- #reset! ⇒ Object
- #server_on_port(port) ⇒ Object
Constructor Details
#initialize ⇒ SocketlessServerMap
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
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
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 |