#!/usr/bin/perl
use lib '../lib';
use strict;
use warnings;
use Continuity;
use Continuity::Inspector;
my $server = new Continuity(
port => 8080,
ip_session => 0,
cookie_session => 'sid',
path_session => 1,
);
$server->loop;
sub getNum {
my $request = shift;
$request->print( qq{
Enter Guess: <input name="num" id=num>
<script>document.getElementById('num').focus()</script>
</form>
</body>
</html>
});
$request = $request->next;
my $num = $request->param('num');
return $num;
}
sub main {
my $request = shift;
my $path = $request->request->url->path;
print STDERR "Path: '$path'\n";
# If this is a request for the pushtream, then give them that
if($path =~ /^\/peek/) {
peek($request);
}
while(1) {
my $guess;
my $number = int(rand(100)) + 1;
my $tries = 0;
my $out = qq{
<html>
<head><title>The Guessing Game</title></head>
<body>
<form method=POST>
Hi! I'm thinking of a number from 1 to 100... can you guess it?<br>
};
do {
$tries++;
do {
$request->print($out);
$guess = getNum($request);
} until ($guess > 0);
$out .= "It is smaller than $guess.<br>\n" if $guess > $number;
$out .= "It is bigger than $guess.<br>\n" if $guess < $number;
} until ($guess == $number);
$request->print("You got it! My number was in fact $number.<br>\n");
$request->print("It took you $tries tries.<br>\n");
$request->print('<a href="/">Try Again</a>');
$request->next;
}}
sub peek {
my ($request) = @_;
while(1) {
my $sessions = $server->{mapper}->{sessions};
$request->print(sprintf "Session count: %d<br>\n", scalar keys %$sessions);
my $sess;
my $inspector = Inspector->new( callback => sub {
use PadWalker 'peek_my';
for my $i (1..100) {
print STDERR "bjork\n";
my $vars = peek_my($i) or last;
next unless exists $vars->{'$number'};
$request->print("$sess: secret number: ", ${ $vars->{'$number'} }, "<br>\n");
last;
}
});
foreach $sess (keys %$sessions) {
# next unless $sess =~ /^\.\./;
next if $sess =~ /peek/; # don't try to peek on ourself. that would be bad.
$inspector->inspect( $sessions->{$sess} );
}
$request->next;
}
}