#!/usr/bin/perl -w

use strict;
use Carp;

use IO::Socket;
use Getopt::Long;

use constant RECORDER_SERVER => 50080;

use constant RECORDTIME => 5;  # Minutes
use constant BANDWIDTH => 16; # MHz

sub send_data($$);
sub send_cmd($$);

my $stop = 0;
GetOptions('stop'=>\$stop);

my @recorders = qw(pkvsi1-ext cavsi1-ext mpvsi2-ext);
#my @recorders = qw(pkvsi2-ext);

my ($status);
foreach my $rec (@recorders) {

  if ($stop) {
    print "Stopping $rec\n";
    $status = send_cmd("record-stop", $rec);
    exit(1) if !defined $status;

 } else {
    $status = send_data("directory_name=junk", $rec);
    exit(1) if !defined $status;
    $status = send_data("filename_prefix=junk", $rec);
    exit(1) if !defined $status;
    $status = send_data(sprintf("bandwidth=%d",BANDWIDTH), $rec);
    exit(1) if !defined $status;
    $status = send_data("vsib_mode=3", $rec);
    exit(1) if !defined $status;
    $status = send_data("compression=xxxx", $rec);
    exit(1) if !defined $status;
    $status = send_data(sprintf("record_time=%dm",RECORDTIME), $rec);
    exit(1) if !defined $status;
    $status = send_data("diskselection=on_local", $rec);
    exit(1) if !defined $status;
    
    print "Starting $rec\n";
    $status = send_cmd("record-start", $rec);
    exit(1) if !defined $status;
  }
}

sub server_comm {
  my ($type, $message, $recorder) = @_;
  # Connect to the recorder server
  my $socket = IO::Socket::INET->new(PeerAddr => $recorder,
				     PeerPort => RECORDER_SERVER,
				     )
    || die "Could not connect to $recorder\n";

  #print "SENDING: <$type>$message</$type>";
  print $socket "<$type>$message</$type>";

  # Get response
  
  my $ret = "";
  while(<$socket>){
    $ret .= $_;
  }
  close($socket);


  if ($ret =~ /<fail>(.*)<\/fail>/s) {
    carp "$1";
    return undef;
  } elsif ($ret =~ /<succ \/>/s) {
    return "";
  } elsif ($ret =~ /<status>.*<\/status>/s) {
    return $1;
  } else {
    warn "Did not understand server reponse ($ret): $!\n";
    return undef;
  }
}


sub send_data($$) {
  return server_comm('data', shift, shift);
}

sub send_cmd($$) {
  return server_comm('cmnd', shift, shift);
}
