From 10caf1490c8ad1b01a459c13552c0145526320ad Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 26 Jun 2009 20:14:19 -0500 Subject: parse out sessions from the main screen --- lib/Net/Termcast.pm | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/Net/Termcast.pm b/lib/Net/Termcast.pm index 307c237..1da5223 100644 --- a/lib/Net/Termcast.pm +++ b/lib/Net/Termcast.pm @@ -1,5 +1,6 @@ package Net::Termcast; use Moose; +use MooseX::AttributeHelpers; use IO::Socket::Telnet; use Term::VT102; @@ -35,6 +36,18 @@ has in_menu => ( init_arg => undef, ); +has sessions => ( + traits => ['Collection::ImmutableHash'], + is => 'ro', + isa => 'HashRef[Net::Termcast::Session]', + default => sub { {} }, + init_arg => undef, + provides => { + get => 'session', + exists => 'has_session', + }, +); + has _vt => ( is => 'ro', isa => 'Term::VT102', @@ -77,9 +90,6 @@ sub refresh { $self->_get_menu; } -sub sessions { -} - sub select_session { my $self = shift; my ($session) = @_; @@ -117,7 +127,22 @@ sub _get_menu { $self->_parse_menu; } +# XXX: need to handle multiple pages sub _parse_menu { + my $self = shift; + my %sessions; + for my $row ($self->rows) { + next unless $row =~ /^ ([a-z])\) (\w+) \(idle ([^,]+), connected ([^,]+), (\d+) viewers?, (\d+) bytes?\)/; + my ($session, $name, $idle, $connected, $viewers, $bytes) = ($1, $2, $3, $4, $5, $6); + $sessions{$session} = Net::Termcast::Session->new( + name => $name, + idle => $idle, + connected => $connected, + viewers => $viewers, + bytes => $bytes, + ); + } + return \%sessions; } __PACKAGE__->meta->make_immutable; -- cgit v1.2.3