class Server
A simple UDP server that can be used to receive messages from a child process, tracking readiness, status changes, etc.
Nested
Definitions
def self.load(message)
Parse a message, according to the sd_notify
protocol.
Signature
-
parameter
message
String
The message to parse.
-
returns
Hash
The parsed message.
Implementation
def self.load(message)
lines = message.split("\n")
lines.pop if lines.last == ""
pairs = lines.map do |line|
key, value = line.split("=", 2)
key = key.downcase.to_sym
if value == "0"
value = false
elsif value == "1"
value = true
elsif key == :errno and value =~ /\A\-?\d+\z/
value = Integer(value)
end
next [key, value]
end
return Hash[pairs]
end
def self.generate_path
Generate a new unique path for the UNIX socket.
Signature
-
returns
String
The path for the UNIX socket.
Implementation
def self.generate_path
File.expand_path(
"async-container-#{::Process.pid}-#{SecureRandom.hex(8)}.ipc",
Dir.tmpdir
)
end
def self.open(path = self.generate_path)
Open a new server instance with a temporary and unique path.
Implementation
def self.open(path = self.generate_path)
self.new(path)
end
def initialize(path)
Initialize the server with the given path.
Signature
-
parameter
path
String
The path to the UNIX socket.
Implementation
def initialize(path)
@path = path
end
attr :path
Signature
-
attribute
String
The path to the UNIX socket.
def bind
Generate a bound context for receiving messages.
Signature
-
returns
Context
The bound context.
Implementation
def bind
Context.new(@path)
end