Created
April 25, 2018 05:55
-
-
Save orleika/aa25745222c53b08a7d00d6c714a827e to your computer and use it in GitHub Desktop.
some description
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# ychat | |
# simple multicast chat tools on the shell (only supported bash) | |
# copyrights: koki yasuda aka orleika <[email protected]> | |
# Licensed under MIT | |
# | |
# Usage: | |
# ychat | |
# | |
############################################################################## | |
# Strict mode | |
############################################################################## | |
set -o nounset | |
set -o errexit | |
trap 'echo "Aborting due to errexit on line $LINENO. Exit code: $?" >&2' ERR | |
set -o errtrace | |
set -o pipefail | |
IFS=$' | |
' | |
############################################################################### | |
# Environment | |
############################################################################### | |
_ME=$(basename "${0}") | |
############################################################################### | |
# Help | |
############################################################################### | |
_print_logo() { | |
tput clear | |
echo -e "\e[1;31m | |
## ## ###### ## ## ### ######## | |
## ## ## ## ## ## ## ## ## | |
#### ## ## ## ## ## ## | |
## ## ######### ## ## ## | |
## ## ## ## ######### ## | |
## ## ## ## ## ## ## ## | |
## ###### ## ## ## ## ## \e[m | |
" | |
} | |
_print_help() { | |
_print_logo | |
echo -e " | |
Usage: | |
NAME=[your name] PORT=[udp port] ${_ME} [OPTION]... | |
Options: | |
-h, --help Show this screen." | |
} | |
############################################################################### | |
# Program Functions | |
############################################################################### | |
sender=$(mktemp "/tmp/${0##*/}.tmp.XXXXXX") | |
receiver=$(mktemp "/tmp/${0##*/}.tmp.XXXXXX") | |
log=$(mktemp "/tmp/${0##*/}.tmp.XXXXXX") | |
atexit() { | |
[[ -n ${sender-} ]] && rm -f "$sender" | |
[[ -n ${receiver-} ]] && { pkill "${0##*/}"; rm -f "$receiver"; } | |
[[ -n ${log-} ]] && rm -f "$log" | |
} | |
trap atexit EXIT | |
trap 'trap - EXIT; atexit; exit -1' INT PIPE TERM | |
_sender() { | |
port=$1 | |
message=$2 | |
base64 -d <<EOF | gzip -d > "$sender" | |
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 | |
rWCJJCgaAAA= | |
EOF | |
chmod +x "$sender" | |
echo "$message" | "$sender" "$port" | |
} | |
_receiver() { | |
port=$1 | |
base64 -d <<EOF | gzip -d > "$receiver" | |
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 | |
EOF | |
chmod +x "$receiver" | |
"$receiver" "$port" >> "$log" & | |
} | |
_ychat() { | |
name=$1 | |
port=$2 | |
_print_logo | |
_receiver "$port" | |
while : | |
do | |
echo -en "\nsay: "; IFS="" read -r message | |
date=$(date '+%H:%M:%S') | |
if [[ -n "$message" ]] | |
then | |
_sender "$port" "$name ($date)> $message" | |
fi | |
_print_logo | |
tail -n15 "$log" | |
done | |
} | |
############################################################################### | |
# Main | |
############################################################################### | |
ip="[$(hostname -i)]" | |
name=${NAME:-"$ip"} | |
port=${PORT:-8900} | |
_main() { | |
if [[ "${1:-}" =~ ^-h|--help$ ]] | |
then | |
_print_help | |
else | |
_ychat "$name" "$port" | |
fi | |
} | |
_main "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment