summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2009-06-26 20:14:19 -0500
committerJesse Luehrs <doy@tozt.net>2009-06-26 20:14:19 -0500
commit10caf1490c8ad1b01a459c13552c0145526320ad (patch)
tree8be6f8fbe4e346445cc1e23e1da17720427e4bc7
parenteb2d1ba10ef4dfa02c9ada0a339f7e7a1738e4f1 (diff)
downloadnet-termcast-10caf1490c8ad1b01a459c13552c0145526320ad.tar.gz
net-termcast-10caf1490c8ad1b01a459c13552c0145526320ad.zip
parse out sessions from the main screen
-rw-r--r--lib/Net/Termcast.pm31
1 files 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;