You are connected to
You are User $user
FreeHAL Online Demo
};
sub handle_request {
my ($sock_ref, $prefix) = @_;
my $sock = $$sock_ref;
#print { $sock } $user, "\n";
#print { $sock } $user, "\n";
#print { $sock } $user, "\n";
if ( $p_ask ) {
# print $prefix . 'QUESTION:', $p_ask, "\n";;
print { $sock } 'QUESTION:', $p_ask, "\n";
print "FreeHAL hat ihre Eingabe erhalten. Bitte warten Sie einige Sekunden.
";
close $sock;
}
if ( $p_ask ) {
my $content = '';
for (my $g = 0; $g < 900; $g ) {
$sock = new IO::Socket::INET(
PeerAddr => $localhost,
PeerPort => '' . $port,
Proto => 'tcp',
Blocking => 1,
Timeout => 50,
);
<$sock> if $sock;
next if !$sock;
print { $sock } "GET:LINES\n";
eval {
local $SIG{ALRM} = sub { close $sock; };
local $SIG{__DIE__} = sub { close $sock; };
my $alarm = 2;
alarm($alarm);
LINE:
while ( defined ( my $line = <$sock> ) ) {
$| = 1;
#print " ";
#print "noch ", $alarm, " Sekunden ";
#print " ";
if ( $line =~ /BYE/ ) {
#last;
}
if ( $line =~ /DISPLAY/ ) {
( $content = $line ) =~ s/DISPLAY://igm;
#alarm(do { $alarm /= 1.3; $alarm ||= 1; $alarm = int($alarm); $alarm});
#last LINE;
# send to browser
$content =~ s/[;]+[-]*[)]+/
/igm;
$content =~ s/[:]+[-]*[)]+/
/igm;
if ( $content ) {
my $old_alarm = $alarm;
$alarm -= 1;
print ''.$content.'
';
print '', "\n";
}
}
if ( $line =~ /SPEAK:/ ) {
if ( !$content ) {
( $content = $line ) =~ s/SPEAK://igm;
}
#alarm(do { $alarm /= 1.5; $alarm ||= 1; $alarm});
}
last;
}
alarm(0);
};
}
die $@ if $@;
$sock->shutdown(2);
alarm(30);
print "
";
my $dialog = 'Mensch:: ' . (split(/[<]b[>]Mensch[<]\/b[>][:][:]/, $content))[-1] || $content;
open my $dialog_file, ">>", 'dialog.txt';
chomp $dialog;
$dialog =~ s/[<]br[>]/\n/igm;
chomp $dialog;
$dialog =~ s/[<](.*?)[>]//igm;
$dialog =~ s/\s*$//igm;
$dialog =~ s/^\s*//igm;
my $time = scalar localtime;
my $sentences = '';
foreach my $line ( split /\n/, $dialog ) {
chomp $line;
print $dialog_file $time . "\t"
. $ENV{'REMOTE_ADDR'} . "\t"
. $line . "\n";
if ( $line =~ /^FreeHAL[:]/i ) {
$line =~ s/[:]+//;
$line =~ s/^jeliza//igm;
$sentences .= ' ' . $line;
}
}
close $dialog_file;
# send a mail
# please edit this!
my $send_mail_to_1 = 'dialog@freehal.org';
my $send_mail_to_2 = 'tobias.schulz0@gmail.com';
my $temp_ip = $ENV{'REMOTE_ADDR'};
my $text = << "ENDE";
To: $send_mail_to_1
BCC: $send_mail_to_2
Subject: $temp_ip: $time
$dialog
ENDE
until ( open( MAIL, "|/usr/sbin/sendmail -t" ) ) {
print "error.\n";
print "Error starting sendmail: $!\n";
select undef, undef, undef, 2;
}
# print MAIL "From: me\@mydom.com\n";
print MAIL $text;
close(MAIL) || print "Error closing mail: $!\n";
# print "Mail sent.\n";
$sentences =~ s/\s+/%20/igm;
print << " EOT" if $use_speech;
EOT
if ( '127.0.0.1' eq $p_server && 0 ) {
my $ps_output = `ps aux | grep 'jeliza-auto-server.pl' | grep -v grep`;
#print $ps_output;
chomp $ps_output;
if ( !$ps_output ) {
$content .= qq{
FreeHAL ist leider eingeschlafen, während oder nachdem es ihre Eingabe hätte beantworten sollen.
Wenn Sie keine Antwort bekommen haben, probieren Sie es bitte noch einmal.
}
}
}
if ( -f 'message.txt' ) {
print "
";
open my $file, '<', 'message.txt';
print <$file>;
close $file;
print "
";
}
}
close $sock;
}
my %already_tested = ();
if ( !grep { $_ && $_ !~ /^\s*?$/ } all_servers() ) {
print qq{
Leider schlafen momentan alle FreeHALs auf dieser Welt, oder diese Software hier enthält einen Fehler. Melden Sie das bitte an ''info\@freehal.org''.
};
}
else {
my $prefix = '';
my $i = 0;
while ( !$sock && $i < 10 ) {
$i += 1;
next if $already_tested{ $p_server } >= 2;
$sock = new IO::Socket::INET(
# PeerAddr => $default_server eq $p_server ? '127.0.0.1'
# : $p_server,
PeerAddr => $localhost,
PeerPort => '' . $port,
Proto => 'tcp',
Blocking => 1,
Timeout => 50,
);
<$sock> if $sock;
next if !$sock;
#print $sock "REQUEST:", $p_server, "\n";
#my $partner = (split /[:]/, scalar <$sock>)[1] || '';
#$partner =~ s/[\r\n]//gm;
#if ( !$partner ) {
# $partner = 'rand';
#}
# select undef, undef, undef, 0.1 while !$sock;
$prefix = "REDIRECT:" . $p_server . ":";
$already_tested{ $p_server } = 1;
if ( $i >= 2 && $already_tested{ $p_server } == 2 ) {
print qq{
Leider schläft das FreeHAL unter $p_server gerade.
};
}
#if ( !$partner || $partner =~ /x/ ) {
# $p_server = random_server();
#}
}
if ( $sock ) {
handle_request(\$sock, $prefix);
}
if ( $i == 5 ) {
print qq{
Bitte haben Sie einem Moment Geduld und laden Sie nach 2-3 Minuten diese Seite neu.
};
}
}
print qq{