add: 'trigger-wait' and 'trigger-wait' with key management

This commit is contained in:
xdrm-brackets 2018-02-04 14:36:05 +01:00
parent b251a0599b
commit 579825f67f
2 changed files with 122 additions and 0 deletions

31
trigger-send Executable file
View File

@ -0,0 +1,31 @@
#!/bin/bash
#!/bin/bash
# (1) Init.
#--------------------------------------------------------#
# (1) Get current absolute dir
ROOT=$(dirname `realpath $0`);
# (2) Check argc
test $# -lt 2 && echo -e "error: too fewarguments\n\n\e[1mUSAGE\e[0m\n\ttrigger-send <key> <host> <port>\n\n\e[1mARGUMENTS\e[0m\n\t<key>\tThe key of the trigger\n\t<host>\tThe host to send the trigger to\n\t<port>\tThe port to send the trigger to\n" && exit 1;
# (3) Check @PORT range #
MIN_PORT=1024;
MAX_PORT=49151;
test "$3" -gt "$MAX_PORT" -o "$3" -lt "$MIN_PORT" && echo "error: <port> must be between $MIN_PORT and $MAX_PORT" && exit 1;
# (4) Set argument explicit names #
TRIGGER_KEY="$1";
TRIGGER_HOST="$2";
TRIGGER_PORT="$3";
# (2) Send trigger signal
#--------------------------------------------------------#
echo "+ connecting to $TRIGGER_HOST:$TRIGGER_PORT";
bash -c "exec 4>/dev/tcp/$TRIGGER_HOST/$TRIGGER_PORT; echo -n \"$TRIGGER_KEY\" >&4; ";
echo " + message '$TRIGGER_KEY' sent";
echo "+ close connection";

91
trigger-wait Executable file
View File

@ -0,0 +1,91 @@
#!/bin/bash
#!/bin/bash
# (1) Init.
#--------------------------------------------------------#
# (1) Get current absolute dir
ROOT=$(dirname `realpath $0`);
# (2) Check argc
test $# -lt 2 && echo -e "error: too fewarguments\n\n\e[1mUSAGE\e[0m\n\ttrigger-wait <key> <port>\n\n\e[1mARGUMENTS\e[0m\n\t<key>\tThe key of the trigger (client must match it)\n\t<port>\tTo port to listen to\n" && exit 1;
# (3) Check @PORT range #
MIN_PORT=1024;
MAX_PORT=49151;
test "$2" -gt "$MAX_PORT" -o "$2" -lt "$MIN_PORT" && echo "error: <port> must be between $MIN_PORT and $MAX_PORT" && exit 1;
# (4) Set argument explicit names #
TRIGGER_KEY="$1";
TRIGGER_PORT="$2";
# (5) Create a temporary file #
TMPFILE="/dev/shm/trigger_wait_${TRIGGER_KEY}_pid";
# (6) Define on-exit routine #
LOOP_PID="";
on_exit(){
echo "- killing loop";
kill -INT $LOOP_PID 2>/dev/null;
echo "- killing main listener ($TRIGGER_PID)";
kill -INT $TRIGGER_PID 2>/dev/null;
# delete tmp file
echo "- deleting tmp file";
rm $TMPFILE 2>/dev/null;
exit 1;
}
# (2) Launch pool listener
#--------------------------------------------------------#
# (1) Bind-input #
echo -e "\e[32m+\e[0m listen $TRIGGER_PORT";
$ROOT/bind-input trigger $TRIGGER_PORT > $TMPFILE;
TRIGGER_PID="`cat $TMPFILE`";
# (3) Launch pool manager
#--------------------------------------------------------#
# infinite listener
(
trap "on_exit;" HUP INT KILL TERM;
while true; do
# Listen on port @TRIGGER_PORT
MSG=`$ROOT/read trigger`;
# Do nothing if empty msg
test -z "$MSG" && sleep .5 && continue;
echo -e " + received '\e[33m$MSG\e[0m'";
# If wrong key
test "$MSG" != "$TRIGGER_KEY" && echo " + wrong key" && sleep .5 && continue;
# If valid key
echo " + trigger received" && echo -e "\e[31m+\e[0m stop listening on $TRIGGER_PORT" && break;
done;
)&
LOOP_PID=$!;
# (4) Set exit management
#--------------------------------------------------------#
# (1) Set trap for "exit" signals #
trap "kill -INT $LOOP_PID 2>/dev/null;" HUP INT KILL TERM;
# (2) Wait for main loop to end
wait $LOOP_PID;
on_exit;