NAME
App::OpenHAP::Host - the host of the Protocol::HAP engine
SYNOPSIS
use App::OpenHAP::Host;
my $server = App::OpenHAP::Host->new(
port => 51827,
pin => '123-45-678',
name => 'My Bridge',
storage_path => '/var/db/openhapd',
);
$server->add_accessory($accessory);
$server->update_config_number;
$server->run; # returns when a signal stops the loop
$server->shutdown;
DESCRIPTION
This module hosts the sans-IO Protocol::HAP::Server engine on OpenBSD-style daemon plumbing. The engine owns the protocol; this module owns everything the operating system hands out: the listening socket, per-connection reads and writes, the event loop and its timers, the MQTT client, and the mDNS advertisement.
The host builds the engine over Protocol::HAP::Store::File, the process default logger, an output contract that writes through the connection map, the one-shot timers of Fugu::EventLoop, and an on_pairing_changed hook that re-advertises the mDNS TXT record.
Each connection is filed under its session id: the session and its socket together. A fileno index resolves reads to the session id. The kernel reuses descriptors; session ids never repeat.
METHODS
new(%args)
port, pin, name, storage_path, and setup_id.
engine()
The Protocol::HAP::Server engine of this host.
run(), shutdown(), listen()
The service lifecycle. run serves until a signal ends the loop; shutdown closes the listener and every client connection afterwards.
set_mqtt_client($mqtt), set_mdns($mdns)
Attach the MQTT client and the mDNS handle. The MQTT client ticks on the loop and reconnects on its own schedule; the mDNS handle receives a fresh TXT record when the engine reports a pairing change.
mdns_txt_string()
The TXT records of the engine in the format that mdnsd publishes, through Fugu::Mdnsd::format_txt.
add_accessory($accessory), is_paired(), update_config_number()
Pass-throughs to the engine, for bin/openhapd and the device loader.
control_status(), control_devices()
What the control socket answers: engine introspection composed with host state (uptime, MQTT, mDNS, connection count). Nothing here is a secret.
SEE ALSO
Protocol::HAP::Server, Protocol::HAP::Store::File, openhapd(8), hapctl(8)