/
CDC-1.2b/
CDC-1.2b/src/
parent $utilities
object $housekeeper

var $root child_index 0
var $root owners [$housekeeper, $core]
var $root fertile 0
var $has_commands commands []
var $has_commands shortcuts []
var $has_verbs verbs #[]
var $location contents []
var $located location $void
var $user password "*"
var $user connected_at 0
var $user last_command_at 0
var $user connections []
var $user creation_time 758252662
var $user action ""
var $root inited 1
var $root owned [$housekeeper]
var $root manager $housekeeper
var $root writable [$housekeeper]
var $root readable ['parameters, 'methods, 'code]
var $root dbref 'housekeeper

method did_disconnect
    var task_queue, task;
    
    if (caller() != $user)
        throw(~perm, "Permission denied");
    
    // because of guests
    if (valid(sender()))
        $scheduler.add_task(300, 'move_user_home, sender());
.

method _move_user_home
    arg who;
    var home, curloc;
    
    .perms(caller(), 'this);
    if (who.connected())
        return;
    curloc = who.location();
    home = who.home();
    if (curloc == home)
        return;
    curloc.sending_user_home(who);
    who.move_to(home);
.

method move_user_home
    arg who;
    var home, curloc;
    
    .perms(sender(), 'system);
    if (who.connected())
        return;
    curloc = who.location();
    home = who.home();
    if (curloc == home)
        return;
    who.move_to(home);
    curloc.did_housekeep(who);
.