Module: Bluepill::Socket
- Defined in:
- lib/bluepill/socket.rb
Constant Summary collapse
- TIMEOUT =
Used for client commands
60
- MAX_ATTEMPTS =
5
Class Method Summary collapse
- .client(base_dir, name, &block) ⇒ Object
- .client_command(base_dir, name, command) ⇒ Object
- .server(base_dir, name) ⇒ Object
- .socket_path(base_dir, name) ⇒ Object
Class Method Details
.client(base_dir, name, &block) ⇒ Object
10 11 12 |
# File 'lib/bluepill/socket.rb', line 10 def client(base_dir, name, &block) UNIXSocket.open(socket_path(base_dir, name), &block) end |
.client_command(base_dir, name, command) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/bluepill/socket.rb', line 14 def client_command(base_dir, name, command) res = nil MAX_ATTEMPTS.times do |current_attempt| begin client(base_dir, name) do |socket| Timeout.timeout(TIMEOUT) do socket.puts command res = Marshal.load(socket.read) end end break rescue EOFError, Timeout::Error if current_attempt == MAX_ATTEMPTS - 1 abort('Socket Timeout: Server may not be responding') end puts "Retry #{current_attempt + 1} of #{MAX_ATTEMPTS}" end end res end |
.server(base_dir, name) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/bluepill/socket.rb', line 35 def server(base_dir, name) socket_path = self.socket_path(base_dir, name) UNIXServer.open(socket_path) rescue Errno::EADDRINUSE begin # if sock file has been created, test to see if there is a server UNIXSocket.open(socket_path) rescue Errno::ECONNREFUSED File.delete(socket_path) return UNIXServer.open(socket_path) else logger.err('Server is already running!') exit(7) end end |
.socket_path(base_dir, name) ⇒ Object
51 52 53 |
# File 'lib/bluepill/socket.rb', line 51 def socket_path(base_dir, name) File.join(base_dir, 'socks', name + '.sock') end |