#!/usr/bin/perl -w
######################################################################
# (c) Michael Schilli 1999
######################################################################

package ServerPush;

use CGI qw/:standard/;            # header() exportieren

sub new {
    my ($class, $sep) = shift;    # $sp = ServerPush->new($sep)

    my $self               = {};  # Instanzvariablen-Hash
    $sep                 ||= "TeilDokumentTrenner";
    $self->{seperator}     = $sep;      # Teildokument-Trenner
    $self->{header_sent}   = 0;   # Erster Header gesendet?
    $| = 1;                       # Ausgabe entpuffern
    bless($self, $class);
}

sub server_push {                    
    my ($self, $content, $terminate) = @_; 

    if(!$self->{header_sent}) {
        print header('-nph'  => 1,      # Header ausgeben
                     '-type' => 
        "multipart/x-mixed-replace;boundary=$self->{seperator}"
                    );
        print "\n--$self->{seperator}\n"; 
        $self->{header_sent} = 1;       # Merker setzen
    }
 
    print header(), "$content\n";
    print "\n--$self->{seperator}", 
          defined $terminate ? "--" : "", "\n";
}

###############################################################
package main;

use CGI qw/:standard/;              # header() exportieren

$sp = ServerPush->new();            # Neues Server-Push-Objekt

$sp->server_push(h1(2));            # <H1>2</H1> mit Trenner
sleep(1);
$sp->server_push(h1(1));            # <H1>1</H1> mit Trenner
sleep(1);
                                    # <H1>Boom!</H1> mit 
                                    # abschließendem Trenner
$sp->server_push(h1("Boom!"), "terminate"); 
