--- Session.pm 2007/08/05 13:27:27 145 +++ Session.pm 2007/08/05 15:16:10 150 @@ -23,21 +23,17 @@ =head2 record_session - $self->record_session( 'name', $values ); + $self->record_session( 'name', $value ); =cut -my $last_tick = 0; - sub record_session { my $self = shift; - my $name = shift || confess "no name?"; + my $name = shift || confess "need name"; my $t = $self->app->ticks; - my $dt = $t - $last_tick; - $last_tick = $t; - $self->append_to_file('session.pl', "\$s->{$t}->{$name} = ", dump( @_ ),";\n"); + $self->append_to_file('session.pl', "\$s->{$t}->{'$name'} = ", dump( @_ ),";\n"); } @@ -47,20 +43,57 @@ =cut +my $s; +my @timeline; + sub load_session { my $self = shift; my $path = shift || confess "no path?"; - my $s; + if ( ! -r $path ) { + warn "WARNING: can't open session $path: $!\n"; + return; + } + eval read_file( $path ); - warn "s = ",dump( $s ); + warn "session = ",dump( $s ); - my @timeline = sort { $a <=> $b } keys %$s; + @timeline = sort { $a <=> $b } keys %$s; my ( $from, $to ) = @timeline[0,-1]; printf "loaded session %.2f-%.2fs with %d events\n", $from / 1000, $to / 1000, $#timeline + 1; } +=head2 session_event + + my $v = $self->session_event('key_pressed'); + +=cut + +sub session_event { + my $self = shift; + + return unless @timeline; + + my $name = shift || confess "no name?"; + + my $t = $self->app->ticks; + + # do we have events to trigger? + return if ( $t < $timeline[0] ); + + my $e_t = $timeline[0]; + + # do we have next event and should we take it? + if ( $#timeline > 0 && $t > $timeline[1] ) { + shift @timeline; + $e_t = $timeline[0]; + warn "session_event $e_t $name ",dump( $s->{$e_t}->{$name} )," left ", $#timeline+1, " events\n"; + } + + return $s->{$e_t}->{$name}; +} + =head1 SEE ALSO L