Streaming response API for contentHandlers is now taking shape
This commit is contained in:
parent
c0abcc3e4a
commit
c7235378d1
5 changed files with 94 additions and 74 deletions
|
|
@ -6,7 +6,9 @@ The WebGUI server response object. See L<Plack::Response>
|
|||
|
||||
=cut
|
||||
|
||||
use strict;
|
||||
use parent qw(Plack::Request);
|
||||
use Plack::Util::Accessor qw(session);
|
||||
use WebGUI::Response;
|
||||
|
||||
=head1 METHODS
|
||||
|
|
@ -23,7 +25,9 @@ See L<WebGUI::Session/response>
|
|||
|
||||
sub new_response {
|
||||
my $self = shift;
|
||||
WebGUI::Response->new(@_);
|
||||
my $response = WebGUI::Response->new(@_);
|
||||
$response->session($self->session);
|
||||
return $response;
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
@ -2,7 +2,7 @@ package WebGUI::Response;
|
|||
use strict;
|
||||
use parent qw(Plack::Response);
|
||||
|
||||
use Plack::Util::Accessor qw(streaming writer streamer);
|
||||
use Plack::Util::Accessor qw(session streaming writer streamer);
|
||||
|
||||
=head2 DESCRIPTION
|
||||
|
||||
|
|
@ -12,9 +12,8 @@ The WebGUI server response object. See of L<Plack::Response>
|
|||
|
||||
sub stream {
|
||||
my $self = shift;
|
||||
my $streamer = shift;
|
||||
$self->streamer(shift);
|
||||
$self->streaming(1);
|
||||
$self->streamer($streamer);
|
||||
}
|
||||
|
||||
sub stream_write {
|
||||
|
|
|
|||
|
|
@ -458,8 +458,11 @@ sub open {
|
|||
my $config = ref $c ? $c : WebGUI::Config->new($webguiRoot,$c);
|
||||
my $self = {_config=>$config }; # TODO - if we store reference here, should we weaken WebGUI->config?
|
||||
bless $self , $class;
|
||||
$self->{_request} = $request if defined $request;
|
||||
$self->{_response} = $request->new_response( 200 ) if defined $request;
|
||||
if (defined $request) {
|
||||
$request->session($self); # hello circular reference
|
||||
$self->{_request} = $request;
|
||||
$self->{_response} = $request->new_response( 200 );
|
||||
}
|
||||
my $sessionId = shift || $request->cookies->{$config->getCookieName} || $self->id->generate;
|
||||
$sessionId = $self->id->generate unless $self->id->valid($sessionId);
|
||||
my $noFuss = shift;
|
||||
|
|
|
|||
|
|
@ -95,10 +95,14 @@ sub print {
|
|||
print $handle $content;
|
||||
}
|
||||
elsif ($self->session->response) {
|
||||
if ($self->session->response->streaming) {
|
||||
$self->session->response->stream_write($content);
|
||||
my $response = $self->session->response;
|
||||
if ($response->streaming) {
|
||||
$response->stream_write($content);
|
||||
} else {
|
||||
|
||||
# Not streaming, so buffer the response instead
|
||||
# warn "buffering output";
|
||||
$response->body([]) unless $response->body && ref $response->body eq 'ARRAY';
|
||||
push @{$response->body}, $content;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue