class Object

Public Instance Methods

close!() click to toggle source

We're done here, clean up!

@todo

Not sure how correct this is... fucking threading. *Seems* to work...

@return [nil]

# File lib/qb/ipc/stdio/server/service.rb, line 194
def close!
  logger.debug "Closing...",
    socket: socket,
    server: server,
    path_exists: path.exist?,
    thread: thread,
    env_var: {
      env_var_name => ENV[env_var_name],
    }
  
  # Remove the path from the ENV so if we do anything after this the
  # old one isn't hanging around
  ENV.delete env_var_name
  
  # Kill the thread first so that it can't try to do anything else
  thread.kill if thread && thread.alive?
  
  socket.close unless socket.nil?
  @socket = nil
  server.close unless server.nil?
  @server = nil
  FileUtils.rm( path ) if path.exist?
  
  logger.debug "Closed.",
    socket: socket,
    server: server,
    path_exists: path.exist?,
    thread: thread,
    env_var: {
      env_var_name => ENV[env_var_name],
    }
  
  nil
end
open!() click to toggle source
# File lib/qb/ipc/stdio/server/service.rb, line 156
def open!
  logger.debug "Opening..."
  
  # make sure env var is not already set (basically just prevents you from
  # accidentally opening two instances with the same name)
  if ENV.key? env_var_name
    raise "env already contains key #{ env_var_name }" \
          "with value #{ ENV[env_var_name] }"
  end
  
  @thread = Thread.new do
    Thread.current.name = name
    logger.trace "thread started."
    
    @server = UNIXServer.new path.to_s
    
    while true do
      @socket = server.accept
      work_in_thread
    end
  end
  
  # set the env key so children can find the socket path
  ENV[env_var_name] = path.to_s
  logger.debug "Set env var",
    env_var_name => ENV[env_var_name]
  
  logger.debug "Service open."
end