rendered paste bodyuse strict;
use IO::Socket;
##things that need to be first
my $CNAME = $ENV{COMPUTERNAME}; #our name
my $GET = sub {
my $listen = new IO::Socket::INET (
LocalHost => $CNAME,
LocalPort => '7070',
Proto => 'tcp',
Listen => 1,
# Timeout => 5,
);
death('$GET: Unable to listen.') unless $listen;
my $data;
my $sock = $listen->accept();
while (<$sock>) {
$data .= $_;
}
close($sock) or note('\$GET: Sock not open.') and return 0; #close sock
note("\$GET: Data: @{[ $data ? $data : 'No data.']}");
return split(/::/,$data); #and return
};
my $SND = sub {
my $peer = shift or death('$SND: No one to talk to.'); #die if no peer is given
my $say = new IO::Socket::INET (
PeerAddr => $peer,
PeerPort => '7070',
Proto => 'tcp',
Timeout => 10,
); #open sock (out)
death('$SND: Unable to speak.') unless $say; #die if we failed
print $say shift or death('$SND: Nothing to say.'); #die if there's nothing to send
my @remainder = split(/\s+/,shift);
foreach my $item (@remainder) {
print $say '::', $item;
} #if there's anything else, send it too
close($say); #close sock
return 1;
};
##global
my %global = (
'server' => 'koizumi',
);
##command hash
my %cmnd = (
'intro' => \&intro,
'help' => \&help,
'get' => \&cmd_get,
'raw' => \&cmd_raw,
'set' => \&cmd_set,
'kill' => sub {
note('Thanks for playing.');
exit 1;
}
);
##progrum
my $input = 'intro';
while (1) {
foreach my $regex (sort keys %cmnd) {
if ($input =~ /^\s*($regex)(?:\s+(.*))?/i) {
$input = $cmnd{$1}->($2);
}
}
next if $input =~ /help/i;
$input = join ' ', @{[ $GET->() ]};
}
##command subs
sub cmd_get {
print "hey something worked";
exit 1;
}
sub cmd_raw {
return 1;
}
sub cmd_set {
my ($item,$value) = (shift,shift);
note('Server passed non-existant item.') and return 0 unless defined($global{$item});
$global{$item} = $value;
return 1;
}
##core
sub parse_net_user {
my $data = `net user`;
$data =~ s/\n/ /g;
$data =~ s/\s+/ /g;
$data =~ s/^.*-+\s(.*)/$1/;
$data =~ s/(.*)\sThe command completed successfully\..*/$1/;
$data =~ s/\s+/:/g;
return $data;
}
##micro functions
sub death {
print curti(), ' - ', shift, "\n";
exit 0;
}
sub note {
print curti(), ' - ', shift, "\n";
return 1;
}
sub curti {
my @time = @{[ gmtime ]}[2,1,0];
$time[0] = $time[0]-6 < 0 ? $time[0]+6 : $time[0]-6;
return sprintf('%02d:%02d:%02d', @time);
}
##information
sub intro {
note('Dean\'s multibox user admin client starting up.');
note('Awaiting instructions...');
return 'help';
}
sub help {
note('Help not yet written.');
return 1;
}