diff options
Diffstat (limited to 'teaqueue-server')
-rwxr-xr-x | teaqueue-server | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/teaqueue-server b/teaqueue-server new file mode 100755 index 0000000..02c8b6a --- /dev/null +++ b/teaqueue-server @@ -0,0 +1,53 @@ +#!/bin/bash +# use bash for trap + +set -eu + +# default options +queuefn="queue.txt" +donefn="done.txt" +port=1340 + +usage() +{ + cat <<EOF +Usage: $0 [OPTIONS...] + +Feeds lines from a text file to teaqueue-clients. + +Options: + -h, --help show usage + -p, --port what port to use (default: 1340) + -q, --queue what filename to use as input queue + -d, --done what filename to use for storing done items +EOF +} + +# arg parsing +TEMP=$(getopt -o hH:p: --long help,host,port -n teaqueue-client -- "$@") +if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi +eval set -- "$TEMP" +while true; do + case "$1" in + -h|--help) usage; exit 0;; + -p|--port) port="$2"; shift 2;; + -q|--queue) queuefn="$2"; shift 2;; + -d|--done) donefn="$2"; shift 2;; + --) shift; break;; + *) echo "Arguments parsing error" >&2; exit 1;; + esac +done + +my_exit() +{ + mv "${queuefn}" "${queuefn}.old" + comm --nocheck-order -23 "${queuefn}.old" "${donefn}" > "${queuefn}" + exit 0 +} + +trap my_exit SIGINT SIGTERM + +cat "${queuefn}" | while read -r line; do + printf "%s\n" "$line" | nc -q0 -l -p $port + printf "%s\n" "$line" +done > "${donefn}" |