-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrikRun.sh
executable file
·98 lines (83 loc) · 1.68 KB
/
trikRun.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/sh
byteLength() {
local len oldLang=$LANG oldLC_All=$LC_ALL
LANG=C LC_ALL=C
len=${#1}
LANG=$oLang LC_ALL=$oLcAll
echo $len
}
cmdWrap() {
local cmd="$1"
if [ "$#" == 2 ]; then
local size="$2"
else
local size=$(byteLength $cmd)
fi
echo "$size:$cmd"
}
if [ "$#" == 0 ]; then
echo "Filepath is required"
exit -1
fi
filepath="$1"
filename=$(basename "$filepath")
if [ "$#" == 2 ]; then
address="$2"
else
address='192.168.77.1'
fi
./upload.sh "$filepath" $address
exec 3<> "/dev/tcp/$address/8888"
trap ctrl_c INT
ctrl_c() {
echo \nStopping...
echo -n "4:stop" >&3
exec 3<&-
exit 0
}
runCmd=$(cmdWrap "run:$filename")
echo -n "$runCmd" >&3
KEEPALIVE_PERIOD=3
last_keepalive=$SECONDS
while :; do
IFS=
data=""
while :; do
read -n 1 b 0<&3
if [[ "$b" != ":" ]]; then
data="$data$b"
if (( $SECONDS - $last_keepalive >= $KEEPALIVE_PERIOD )); then
last_keepalive=$SECONDS
echo -n "9:keepalive" >&3
fi
else
break
fi
done
read -n $data cmdRaw <&3
IFS=":"
read -ra ARR <<< "$cmdRaw"
cmd="${ARR[0]}"
if (( "${#ARR[@]}" == 1 )); then
arg=""
else
arg="${ARR[-1]}"
fi
case "$cmd" in
keepalive)
last_keepalive=$SECONDS
echo -n "9:keepalive" >&3
;;
print)
echo "$arg" >&2
;;
error)
echo "Received an error: $arg" >&2
exit -1
;;
*)
echo "Received an unknown command" >&2
;;
esac
sleep 0
done