#!/usr/bin/perl -w use IO::Handle; use POSIX ":sys_wait_h"; pipe PLAYER_RD, DJ_WR; pipe DJ_RD, PLAYER_WR; DJ_WR->autoflush(1); PLAYER_WR->autoflush(1); my $player = fork; print "fork:$!\n" if not defined $player; if(!$player) { # The player close DJ_WR; print "Starting player...\n"; my $gst = undef; my $playing = undef; while(1) { my $stream = ; if ($stream =~ /^what'?s playing?/) { print PLAYER_WR "$playing is playing!\n"; next; } chomp $stream; kill 15, $gst if defined $gst && waitpid(-1, WNOHANG) != -1; $gst = fork; exec "gst-launch-0.10 playbin uri=$stream" if !$gst; $playing = $stream; } print "Closing player...\n"; } else { # The DJ print "Hey! I'm the DJ!!!\n"; my @stream = ( "http://eclipse.desync.com:8090\n", "http://divbyzero.de:8100\n", "http://scfire-ntc-aa04.stream.aol.com:80/stream/1021\n"); my @queue; while(<>) { kill 19, $1 if(/stop (\d+)/); kill 18, $1 if(/start (\d+)/); if (/what'?s playing?/) { print DJ_WR "$&\n"; my $fb = ; print "fb: $fb\n"; } elsif(/rand/) { print DJ_WR $stream[int rand @stream]; } elsif($_ =~ /agrep (.*?)( (\d+)|$)/) { my $pattern = $1; my $interval = $3; print my @str = grep /$pattern/, @stream; if($interval) { push @queue, my $pid = fork; if(!$pid){ sleep int rand $interval*60; while(1) { my $next_stream = $str[int rand @str]; print "$$ switching channel to $next_stream"; print DJ_WR $next_stream; sleep $interval*60; } } } else { print DJ_WR $str[int rand @str]; } } else { print <