Skip to content

Instantly share code, notes, and snippets.

@orleika
Created April 19, 2018 09:39
Show Gist options
  • Save orleika/a09b5b470ba9a66dbb26f38edec20405 to your computer and use it in GitHub Desktop.
Save orleika/a09b5b470ba9a66dbb26f38edec20405 to your computer and use it in GitHub Desktop.
some description
#!/bin/bash
#
# ychat
# simple multicast chat tools on the shell (only supported bash)
# copyrights: koki yasuda aka orleika <admin@orleika.io>
# 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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
YOf8BsEujr+ivrfIo8T/rgSfy99WC4SZoBkAAA==
EOF
chmod +x "$sender"
echo "$message" | "$sender" "$port"
}
_receiver() {
port=$1
base64 -d <<EOF | gzip -d > "$receiver"
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
N3G4GQAA
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