]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
added command_client
authorLudwig Maier <lmaier@brett.e12.ph.tum.de>
Wed, 9 Oct 2013 14:50:50 +0000 (16:50 +0200)
committerLudwig Maier <lmaier@brett.e12.ph.tum.de>
Wed, 9 Oct 2013 14:50:50 +0000 (16:50 +0200)
tools/command_client.pl [new file with mode: 0755]

diff --git a/tools/command_client.pl b/tools/command_client.pl
new file mode 100755 (executable)
index 0000000..5cab4af
--- /dev/null
@@ -0,0 +1,144 @@
+#!/usr/bin/perl -w
+
+use English;
+use strict;
+use Getopt::Long;
+use Data::Dumper;
+use IO::Socket;
+
+#- the command line option flags
+my $opt_help    = 0;
+my $opt_etrax;
+my $opt_port    = 4712;
+my $opt_command;
+my $opt_inter   = 0;
+
+GetOptions ('h|help'      => \$opt_help,
+           'e|etrax=s'   => \$opt_etrax,
+           'p|port=i'    => \$opt_port,
+           'c|command=s' => \$opt_command,
+           'i|inter'     => \$opt_inter);
+
+
+if( $opt_help ) {
+    &help();
+    exit(0);
+}
+
+if( &checkArgs() ){
+    print "Exit.\n";
+    exit(1);
+}
+
+my $cmd_server_prtcl  = 'tcp';
+my $cmd_server_answer = "";
+
+&connectCmdServer();
+
+exit(0);
+
+################### END OF MAIN ####################
+
+sub help()
+{
+    print "\n";
+    print << 'EOF';
+startup.pl    
+
+   This script executes the command via Command_Server running
+   on etrax boards.
+
+Usage:
+   
+   Command line:  command_client.pl 
+   [-h|--help]             : Show this help.
+   [-e|--etrax <name>]     : Etrax board name.
+   [-c|--command <'cmd'>]  : Command to execute. 
+   [-p|--port <port>]      : Port to connect to a server (default: 4712).
+   [-i|--inter]            : Interactive execution of the commands.
+
+Examples:
+
+   Execute command 'sleep 10' on etraxp086:
+      command_client.pl -c 'sleep 10' -e etraxp086
+
+   Execute commands on etraxp086 interactively:
+      command_client.pl -i -e etraxp086
+
+EOF
+}
+
+sub checkArgs()
+{
+    my $retVal = 0;
+
+    unless( $opt_inter || defined $opt_command ){
+       print "You should use either '-c' or '-i' options\n";
+       $retVal = 1;
+    }
+
+    if( $opt_inter && defined $opt_command ){
+       print "You should use either '-c' or '-i' options\n";
+       $retVal = 1;
+    }
+
+    unless( defined $opt_etrax ){
+       print "You must use '-e' option\n";
+       $retVal = 1;
+    }
+    
+    return $retVal;
+}
+
+sub getAnswerFromServer()
+{
+    my ($socket) = @_;
+
+    while( <$socket> ){ 
+       print $_;
+       
+       if( $_ =~ /- END OF OUTPUT -/ ){
+           last;
+       }
+    }
+}
+
+sub connectCmdServer()
+{
+    my $answer;
+
+    my $socket = IO::Socket::INET->new(PeerAddr => $opt_etrax,
+                                      PeerPort => $opt_port,
+                                      Proto    => $cmd_server_prtcl,
+                                      Type     => SOCK_STREAM)
+     or $answer = "ERROR: No response from Cmd Server at $opt_etrax:$opt_port\n";
+
+    unless( defined $answer ){
+       $socket->autoflush(1);
+       print $socket "iamfromhadesdaq\n";
+       $answer = <$socket>;
+
+       print $answer;
+
+       if($opt_inter){
+           #- Interactive commands from keyboard
+           while(1){
+               print "Enter command:  ";
+               my $cmd = <STDIN>;
+               print $socket "$cmd";
+               &getAnswerFromServer($socket);
+           }
+       }
+       elsif( defined $opt_command ){
+           #- Command from the argumant
+           print $socket "$opt_command\n";
+           &getAnswerFromServer($socket);
+       }
+
+       close($socket);
+    }
+
+    unless( $answer =~ /Connection accepted/ ){
+       print $answer;
+    }
+}