#!/usr/bin/perl
{
package MyWebServer;

use HTTP::Server::Simple::CGI;
use Data::Dumper;
use base qw(HTTP::Server::Simple::CGI);
use IPC::Transit;
use IPC::Transit::Serialize;

my %dispatch = (
    '/message' => \&resp_message,
);

sub handle_request {
    my $self = shift;
    my $cgi  = shift;

    my $path = $cgi->path_info();
    my $handler = $dispatch{$path};

    if (ref($handler) eq "CODE") {
        print "HTTP/1.0 200 OK\r\n";
        $handler->($cgi);
    } else {
        print "HTTP/1.0 404 Not found\r\n";
        print $cgi->header,
              $cgi->start_html('Not found'),
              $cgi->h1('Not found'),
              $cgi->end_html;
    }
}

sub resp_message {
    my $cgi  = shift;   # CGI.pm object
    return if !ref $cgi;

    eval {
        my $serialized_message = $cgi->param('message');
        print STDERR "$serialized_message\n";
        my $message = IPC::Transit::Serialize::thaw(serialized_data => $serialized_message);
        print STDERR Dumper $message;
        my $qname = $message->{'.transit'}->{qname};
        delete $message->{'.transit'};
        IPC::Transit::send(qname => $qname, message => $message);

        print $cgi->header,
            $cgi->start_html("Hello"),
            $cgi->h1("Hello $serialized_message!"),
            $cgi->end_html;
    };
    print "error: $@\n" if $@;
}

}

# start the server on port 8080
MyWebServer->new(9816)->run;
