%args>
$forever => 1
%args>
<%init>
$r->content_type("text/html; charset=utf-8");
$r->headers_out->{'Pragma'} = 'no-cache';
$r->headers_out->{'Cache-control'} = 'no-cache';
Jifty->handler->send_http_header;
my $writer = XML::Writer->new;
$writer->xmlDecl( "UTF-8", "yes" );
my $begin = <<'END';
END
chomp $begin;
if ($forever) {
my $whitespace = " " x ( 1024 - length $begin );
$begin =~ s/$/$whitespace/s;
}
$m->print($begin);
$m->flush_buffer;
Jifty->handler->buffer->flush_output;
$writer->startTag("body");
local $SIG{PIPE} = sub {
die "ABORT";
};
my $loops;
while (Jifty->config->framework('PubSub')->{'Enable'}) {
Jifty->web->out(" ") if ++$loops % 10 == 0;
my $sent = write_subs_once($writer);
Jifty->handler->buffer->flush_output;
flush STDOUT;
last if ( $sent && !$forever );
sleep 1;
}
$writer->endTag();
return;
sub write_subs_once {
my $writer = shift;
Jifty::Subs::Render->render(
Jifty->web->session->id,
sub {
my ( $mode, $name, $content, $attrs ) = @_;
$writer->startTag( "pushfrag", mode => $mode, %{$attrs || {}} );
$writer->startTag( "fragment", id => $name );
$writer->dataElement( "content", $content );
$writer->endTag();
$writer->endTag();
}
);
}
%init>