class Pennyworth::LockService
Attributes
lock_server_host[R]
lock_server_port[R]
Public Class Methods
new(lock_server_address)
click to toggle source
# File lib/pennyworth/lock_service.rb, line 23 def initialize(lock_server_address) fields = lock_server_address.split(":") @lock_server_host = fields[0] @lock_server_port = fields[1] @sockets = {} end
Public Instance Methods
info(lock_name)
click to toggle source
# File lib/pennyworth/lock_service.rb, line 75 def info(lock_name) if locked?(lock_name) socket(lock_name).puts("d #{lock_name}") response = socket(lock_name).gets response =~ /^#{lock_name}: (.*):/ client = $1 return "'#{lock_name}' is locked by #{client}" else return "'#{lock_name}' is not locked" end end
keep_lock()
click to toggle source
# File lib/pennyworth/lock_service.rb, line 49 def keep_lock # Sleep forever to keep process running to keep TCP connection to lock # server open. When the process is ended the connection is closed and the # lock is released. Users can end the process and release the lock with # Ctrl-C. sleep end
locked?(lock_name)
click to toggle source
# File lib/pennyworth/lock_service.rb, line 65 def locked?(lock_name) socket(lock_name).puts("i #{lock_name}") response = socket(lock_name).gets if response =~ /^1/ return true else return false end end
release_lock(lock_name)
click to toggle source
# File lib/pennyworth/lock_service.rb, line 57 def release_lock(lock_name) if !@sockets[lock_name] raise LockError.new("Lock '#{lock_name}' doesn't exist") end @sockets[lock_name].close @sockets.delete(lock_name) end
request_lock(lock_name)
click to toggle source
# File lib/pennyworth/lock_service.rb, line 37 def request_lock(lock_name) socket(lock_name).puts("g #{lock_name}") response = socket(lock_name).gets if response =~ /^1/ return true elsif response =~ /^0/ return false else raise LockError.new("Error, received: #{response}") end end
socket(lock_name)
click to toggle source
# File lib/pennyworth/lock_service.rb, line 30 def socket(lock_name) if !@sockets.has_key?(lock_name) @sockets[lock_name] = TCPSocket.new(@lock_server_host, @lock_server_port) end @sockets[lock_name] end