#!perl.exe
use warnings;
use POE qw( Wheel::Run::Win32 Filter::Line);
use POE::Component::Server::HTTPServer;
use POE::Component::Server::HTTPServer::Handler;
use POE::Component::JobQueue;
use POE::Filter::Reference;
use File::Basename;
use Data::Dump qw(dump);
my $port=8080;
my $max_tasks=3;
sub _start {
my ( $kernel, $heap ) = @_[ KERNEL, HEAP ];
$heap->{child2} = POE::Component::Server::HTTPServer->new(
port=>$port,
handlers => [ "/add" => \&add_task,
"/" => \&root_handler
]
);
$heap->{child2}->create_server();
POE::Component::JobQueue->spawn
( Alias => 'passive',
WorkerLimit => $max_tasks,
Worker => \&make_a_worker,
Passive => { }
);}
# =========== HTTP handlers ========
sub root_handler {
my $context = shift;
print "\nroot_handler ===request===\n";
print "root_handler: uri: ",$context->{request}->uri,"\n";
$context->{response}->code(200);
$context->{response}->content(
"
Hi There
\n"
);
return H_FINAL;
}
sub add_task {
my $context = shift;
print "\nadd_task ===request===\n";
print "add_task uri: ", $context->{request}->uri,"\n";
$context->{request}->uri=~/\/add\?(.*)/;
my @job_params=($1);
POE::Kernel->post( 'passive',
'enqueue',
'postback',
@job_params
);
$context->{response}->code(200);
$context->{response}->content(
"add task ".join(" ",@job_params)."
\n"
);
return H_FINAL;
}
# =========== JobQueue handlers ========
sub make_a_worker {
my ($postback, $message) = @_;
POE::Session->create(
inline_states => {
_start => \&worker_start,
worker_child_stdout => \&worker_child_stdout,
worker_closed => \&worker_closed,
sig_child => \&sig_child
},
args => [ @_ ]
);
}
sub worker_start
{
my ($kernel, $session, $heap, @args ) = @_[KERNEL, SESSION, HEAP, ARG0 .. $#_];
$heap->{postback}=$args[0];
$heap->{message} =$args[1]; # file name
$heap->{SessionID} = $session->ID;
print " -start_message_process: ".$heap->{SessionID}."\n";
my @ffmpeg_args=("-y","-i","","-acodec","pcm_s16le","-ar","16000","-ab","16000","-ac","1","