parent $utilities
object $heart
var $root dbref 'heart
var $root child_index 0
var $root fertile 0
var $root manager $heart
var $root owned [$heart]
var $root owners [$heart]
var $root writable []
var $root readable ['parameters, 'methods, 'code]
var $root inited 1
var $heart heart_failures []
var $heart hearts []
method pulse
var robot, h;
// send every robot that has a heart a pulse, if needed.
for robot in [1 .. listlen(hearts)] {
if ((((hearts[robot])[2]) + ((hearts[robot])[3])) < time()) {
.debug("pulsing", hearts[robot]);
hearts = replace(hearts, robot, [(hearts[robot])[1], time(), (hearts[robot])[3]]);
(| ((hearts[robot])[1]).pulse() |);
}
}
.
method add_heartbeat
arg [delay];
var p;
delay = [@delay, 60][1];
for p in [1 .. listlen(hearts)] {
if (((hearts[p])[1]) == sender()) {
hearts = replace(hearts, p, [sender(), 0, delay]);
return;
}
}
hearts = [@hearts, [sender(), 0, delay]];
.
method del_heartbeat
var h, pos;
h = [];
for pos in [1 .. listlen(hearts)] {
if (((hearts[pos])[1]) == sender()) {
if (pos > 1)
h = [@s, sublist(hearts, 1, pos - 1)];
if (pos < listlen(hearts))
h = [@h, sublist(hearts, pos + 1)];
hearts = h;
return;
}
}
throw(~objnf, ("Sender (" + tostr(sender())) + ") does not have a heartbeat.");
.