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."); .