Alvis-Saa
view release on metacpan or search on metacpan
lib/Alvis/Tana.pm view on Meta::CPAN
my %ERROR;
my $debug = 0;
######################################################################
#
# Public methods
#
###################################################################
sub error($)
{
my ($client) = @_;
return $ERROR{$client};
}
sub readname($)
{
my ($client) = @_;
my $len = readnum($client);
if(!defined($len))
{
return undef;
}
my ($name,$got) = readbytes($client, $len);
if(!defined($name))
{
return undef;
}
return $name;
}
sub readnum($)
{
my ($client) = @_;
my $got = 0;
my $num = '';
my $char = '0';
while($char =~ /[0-9]/)
{
my $bytes = CORE::sysread($client, $char, 1);
lib/Alvis/Tana.pm view on Meta::CPAN
$ERROR{$client} = "No numbers in readnum, got '$char' instead.";
!$debug || print STDERR "readnum: $ERROR{$client}\n";
return undef;
}
# warn "Alvis::Tana::readnum() read num $num";
return $num;
}
sub readbytes($$)
{
my ($client, $len) = @_;
my $str = '';
my $got = CORE::sysread($client, $str, $len);
# if($len != $got)
# {
# warn "Alvis::Tana::readbytes(): Wanted $len bytes, got $got";
# $ERROR{$client} = "Wanted $len bytes, got $got";
# !$debug || print STDERR "readnum: $ERROR{$client}\n";
# return undef;
# }
# warn "Alvis::Tana::readbytes(): read $str";
return ($str,$got);
}
sub read_field_header($)
{
my ($client) = @_;
my $keylen = readnum($client);
if(!defined($keylen))
{
!$debug || print STDERR "read: $ERROR{$client}\n";
return (undef, undef);
}
!$debug || print "keylen = *$keylen*\n";
lib/Alvis/Tana.pm view on Meta::CPAN
$$autoread_arb = $key;
}
elsif(defined($autoread_arb))
{
$$autoread_arb = undef;
}
return $msg;
}
sub read_arb($$$)
{
my ($client, $len, $eof) = @_;
my $str = '';
$$eof = 0;
while($len > 0)
{
my $char;
lib/Alvis/Tana.pm view on Meta::CPAN
$str .= $char;
}
$len--;
}
return $str;
}
sub write_arb($$$)
{
my ($client, $str, $final) = @_;
while(length($str) > 0)
{
$str =~ s/(.)(.*)/$2/s;
!$debug || print STDERR "Sending arb '$1'\n";
if($1 eq "\\")
{
my $out = "\\\\";
lib/Alvis/Tana.pm view on Meta::CPAN
if(length($out) != CORE::syswrite($client, $out, length($out)))
{
$ERROR{$client} = "write to socket failed: $@";
return 0;
}
}
return 1;
}
sub write($$$)
{
my ($client, $msg, $type) = @_;
my @keys = keys(%$msg);
my $fieldc = scalar(@keys);
# warn "Writing ", Dumper($msg);
# warn "Client: ", Dumper($client);
# warn "Type: ", Dumper($type);
( run in 0.388 second using v1.01-cache-2.11-cpan-65fba6d93b7 )