package NetHirc::Inventory; use strict; use warnings; sub current_server { my $self = shift; my $first = $self->[0]; return $first if $first->connected(); return undef; } sub connected { my $self = shift; my $server = shift; my $srv = $self->has_server($server); return undef unless $srv; return $srv->{'_connected'}; } sub has_server { my $self = shift; my $server = shift; grep { ($_->{'_aka'} and ($_->{'_aka'} eq $server)) or ($_->{'Server'} eq $server) } @$self; } sub set_server { my $self = shift; my $server = shift; for (my $i = 0; $i < @$self; $i++) { if ($self->[$i]->{'Server'} eq $server) { unshift @$self, splice(@$self, $i, 1); } } } sub reorient { my $self = shift; my ($next) = grep { $_->{'_connected'} } @$self; $self->set_server($next->name()) if $next; return $next; } 1; __END__