#!/usr/bin/bash
# Author: yingjian
# Version: V1.1
# Date: 2023-4-21

#判断参数
if [ $# -ne 5 ];then
    echo "当前传入参数错误。"
    echo "Please bash $0 \$1{发布源:dllwcenter} \$2{平台:laiwan} \$3{起始服id} \$4{截至服id} \$5{执行动作:start、status、stop}"
    exit 2
fi


#脚本启动时间戳
start_time=`date +%s`
#获取脚本目录
cd `dirname $0`
script_dir=`pwd`
#日志目录
log_dir=${script_dir}/logs

if [ ! -d $log_dir ];then
    mkdir -p $log_dir
fi

#发布源名称
source_name=$1
#平台名称
platform_name=$2
#开始数字
start_num=$3
#结束数字
end_num=$4
#动作
action=$5
#日志文件
log_file=${log_dir}/`date +"%Y-%m-%d-%H-%M"`${action}_game_queue.log

if [ "${start_num}" -ge "${end_num}" ];then
    echo "传入的起始服id大于截至服id "
    echo "传入的数字 左边 <= 右边 ！"
    exit 4
fi

#创建有名管道
[ -e /tmp/fd1 ] || mkfifo /tmp/fd1
#创建文件描述符，以可读（<）可写（>）的方式关联管道文件，这时候文件描述符3就有了有名管道文件的所有特性
exec 100<>/tmp/fd1
#关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除，我们留下文件描述符来用就可以了
rm -rf /tmp/fd1
for ((i=1;i<=100;i++))
    do
        echo >&100  ##&3代表引用文件描述符3，这条命令代表往管道里面放入了一个"令牌",要对应exec 3<>/tmp/fd1
    done

ctrl_game () {

sou_name=$1
plat_name=$2
act=$3

for ((i=${start_num};i<=${end_num};i++))
	do
	read -u100
	{
		#  sleep 1
		/p7/${sou_name}/maintain/remote_tool/ctrl_game.sh ${plat_name} $i ${act} >> ${log_file}
		echo "已执行${act}_ctrl_game ${i}."
		echo >&100
	}&
	done
wait
}

update_cross () {

sou_name=$1
plat_name=$2
act=$3

for ((i=${start_num};i<=${end_num};i++))
	do
	read -u100
	{
		#  sleep 1
		/p7/${sou_name}/maintain/remote_tool/update_cross.sh ${plat_name} $i ${act} >> ${log_file}
		echo "已执行${act}_update_cross ${i}."
		echo >&100
	}&
	done
wait
}

if [ "${end_num}" -ge 100000 ] && [ "${end_num}" -le 150000 ];then
    update_cross ${source_name} ${platform_name} ${action}
fi

if [ "${end_num}" -ge 1 ] && [ "${end_num}" -le 99999 ];then
    ctrl_game ${source_name} ${platform_name} ${action}
fi

#脚本结束时间戳
stop_time=`date +%s`
echo "运行时间TIME:`expr $stop_time - $start_time`秒！"
exec 100<&-
exec 100>&-
