Update of /cvsroot/http-webtest/HTTP-WebTest-Recorder/lib/HTTP/WebTest/Recorder
In directory sc8-pr-cvs1:/tmp/cvs-serv11400/lib/HTTP/WebTest/Recorder
Added Files:
POE.pm
Log Message:
Added
--- NEW FILE: POE.pm ---
package HTTP::WebTest::Recorder::POE;
# $Id: POE.pm,v 1.1 2003/02/27 21:59:28 m_ilya Exp $
use strict;
use POE qw(Component::Client::HTTP);
POE::Component::Client::HTTP->spawn(Alias => 'wt_recorder_ua',
Streaming => 1024);
sub new {
my $class = shift;
my %params = @_;
POE::Session->create( inline_states =>
{ _start => \&start,
incoming_request => \&incoming_request,
proxy_response => \&proxy_response },
args =>
[ $params{Alias} ],
heap =>
{ recorder => $params{Recorder} }
);
}
sub start {
my ($kernel, $alias) = @_[KERNEL, ARG0];
$kernel->alias_set($alias);
}
sub incoming_request {
my($kernel, $sender, $heap, $state, $request)
= @_[KERNEL, SENDER, HEAP, ARG0, ARG1];
my $postback = $sender->postback($state => $request);
my $action = $heap->{recorder}->ui_action($request);
if($action) {
my $response = $heap->{recorder}->ui_execute(request => $request,
action => $action);
$postback->($response, undef);
} else {
$request->header(Connection => 'close');
$heap->{postback}{$request} = $postback;
$kernel->post(wt_recorder_ua => request => proxy_response => $request);
}
}
sub proxy_response {
my ($kernel, $heap, $request_packet, $response_packet)
= @_[KERNEL, HEAP, ARG0, ARG1];
my $request = $request_packet->[0];
my($response, $data) = @$response_packet;
$heap->{postback}{$request}->(@$response_packet);
unless(defined $data) {
delete $heap->{postback}{$request};
$heap->{recorder}->record(request => $request,
response => $response);
}
}
1;
|