Created
April 25, 2018 05:55
-
-
Save orleika/aa25745222c53b08a7d00d6c714a827e 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" | |
| H4sICGYW4FoAA3NlbmRlcgDtWG9oW9cVv5IsW0lcW/bSzk0MeQOlUyB+tmTHddp5POdP85yJ4ubP | |
| OmhWRdYfS6ssCel5OF3GWrwOv2peXNiXfRn+1n5ooYwVvBRiZd5mPFjpyli9Px9CaMZT3TJvHSG0 | |
| ZNo5751rX91aTWGwD8NHPJ33O+/87jn377vvfu9k5DG3y8W4uNlXGaJCs2ZjjezpL2y6gG2I+eB/ | |
| P9vHmgF7BT+NaXW6QkVz7SM/D1xNTkAKrNXpbjJz7RK0l4mi1enu3axOM6Zs8jBX5iez/2KdPkx5 | |
| FCSem3hB4gXJn+t5Smxeql8TXd1UbjevF2mlLgq1BcjYLSOB95d3OfjyLq1OB8gvIPGeAF4z+/zC | |
| 8+zNZsYHB3qziZ5sJjc13TM9NNgzOKCW8mrYLhurjVU79fh525+3RyfxsR/vg6sVLmy6PdvE8lAZ | |
| nNtCeWMVvUIu28lhIZYoWJ6yjf1LDfyfaWA/18De38D+EFwdrIv1dV60Mc892sB/XwP70Qb2RAP7 | |
| 6QZ2Fo1OTOZz0ZIRKxrRKIPujGPvDbJSPv5M0mDJ6YzBSkYik2OFYiZnpFhqImmUgJcsFnP5aDYf | |
| jxmZfI5lckkjGkskiqwEz4GcLxgsZuQzgHMJIw8MLJwiTcagwFOR0WPHo2E1rB7BVNz29ekfigt+ | |
| OJb49Jval9mF3t8lvNjhtGcz21oSUHg74zhpEexr5N/CttYGlBuC3SPYLcHeJNg3BLu4rtwR7HXz | |
| qnPLLo5bn2DfJdj9gn23YO8S7OKcUQR7q2DXZz7wWetYkWehutYRD5p+5VuuHXG3Kqx2sAn+2w9o | |
| cIc4jZTqjRrIwY/3AMYmqr5t438ixiauVmz8PmJsqurrNr6JGJuoumDjPyPGpqnO2/gdxNgk1eds | |
| /FvEmG61YONfIsamqV608VXE2CTVMYChD0fN3z+tmzf1mfc2xs6NrlTGfBrTV65ftNXKuRaNWU+C | |
| 47/m57HOetnbAQXoL1QMd+1tu8rzopzXzVtn0fG54TT4samvvdkFSzPQxpH2/Lof0fVPPPrMuks/ | |
| ulYKpNoPnMDGq7h00zsMTrW9v/Y7lF6kHF0r3vyNdz/cujDcU6vLqVRKbT/wfeqHYcsHcTCu0blo | |
| myA335ICRazWbqxCepiPXzc/0sv3/263wpYK0KfXcLRYP/13rbaEbX8N/0LvWK+B4YWK6f0T+LXP | |
| /hyM7U9W2ju8bwBOrXhfBeVmSzos/tbPwNX0LoBFL3/HZ8UBpq5XfCnT+yLaVk4EfFhoeXgO4Vwk | |
| 4AvdvgqZspFF7A2r0w413VcezoLDNUzqKiYVWh1ZHAMw8gucm9aj4AY1mn4gVIHq+59ath4ES9m3 | |
| dAaSWG+19jgoDShUMd+yynehSji8rJfgbv4jbC2xvcxsYC1iJgI39LmeKy0Ki8wdnEUFditiGoGN | |
| iHk5cEc3LwSgdz8Yihy6NWLeHTVv69fvekbNdy3PXcznQ6M79Bcc3xHz44h5+4T595Ha3r/qM8vQ | |
| p+vF9/XyhQAMlWzAHyknAl0RuFMiZSMQjJQvB/qgHkPL8niB7maQhz5zp2Y8+CZuA2hcrPtgnJU9 | |
| +GDqHzQCnLFoXcFccAjimiOuUoyFwwNqH/xCwuqpwAqbLz6iHEzspjVUtEAZ+z2PYgfh5FuDor8C | |
| +g/QvBdAvwfaAL2Xync9e4a5pv2u/a0tPtxr4L4Irx8D7xN0GGnzn2hTZnhWyMPyClCOmCnuG/Cd | |
| l8bRhIYnfuj9QXO0TZtpueL+kWeuyf2Nts96H+/IjuzIjuzI/4fUSBphLnyPzffvfG/6ilez9X2E | |
| g/SdyvfYmtvBfG9d8TiY76ln6TnfG5uk+Z64i/T9Uj58b1+hfTp/x22Q5u9N/s3wRdKLTVqdfZYw | |
| f+f1keZ7eB4fXpd51GnyrxHm7bJB+DQ9/18JP4eQ5Y/UL38jfZt0M53rPED6IdKDpB8j/XXSKdIo | |
| p44ff0QJnnr8/CFlQB1QH1bCfaFwX3+oXwmeSSYUPWY49p7Q0CEWz8ZyE8q3k8USfFwq/WAPK0Ej | |
| NlHqPXMycnLk7Mlo/0BvIm+Ee1KZXCx7iDG1lC4ZRSM2zlT4Tk0WC0zN5Y2kOnJstAeITE3HSmmm | |
| Ji7lSpcmHW0UmTqRm1IpTB2IwrNiMhtDR7orZA0sGz6IVSM5Df8QOgPP8omYEWNqMh1NFWOTyWga | |
| PoI3EVPjRr5YgoCO+la8aAePTWbiEDBv2H9O2U454yVwi+cnJ5M547/vYUdwPvAzFFvc1C/8fEny | |
| d0kYj+9aBP7WeZSDFcm/ScJ4ruIV+BrxNTLoEs8n4S9THTifz/tZMgxRwl7KnfP5/OtlzpznfL6O | |
| VGgh4OsGF7n+DzNnznI+n6enKcF9Ur5uScOngb0GcMzXgTQRFLZ9/lzOUtmb9Sf+LPH5uiO3H6// | |
| NyU+X8cWicDXPYR7tuFPMOEMlG2t26946/24yP0/LvErxK8Q//UGfP6+mJT4/Hy5QIbF+s+pTR6X | |
| ksTn75kgLdRt98j/EqufP0PEHyL+Mclf7r/nJf7WuayDA5K/HP+KxF8g/gI/571H/J8Qf/NMa/P8 | |
| uk415C9IfD/x/Z+T/7LEV4iv+Lf3l/GrzOk7zt86R3fwvDD/RT7P6w0pPj8vXOz47PhcX5X4fN9Q | |
| IX76HvxliR+kc7ogHcrK/S3jVSqL8/m55mHia1IF5P54i+L3SXbOf1qyu7bRHvZpeZH47zbgc/kP | |
| 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