Created
April 19, 2018 09:39
-
-
Save orleika/a09b5b470ba9a66dbb26f38edec20405 to your computer and use it in GitHub Desktop.
some description
This file contains hidden or 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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 | |
| 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