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