]> git.lizzy.rs Git - elidragon_v2.git/blob - scripts/common.sh
Update scripts to include multiserver
[elidragon_v2.git] / scripts / common.sh
1 # common functions used by Elidragon v2 scripts
2
3 function world_lock {
4         echo "/tmp/ElidragonV2_$1_lock"
5 }
6
7 function multiserver_lock {
8         echo "/tmp/ElidragonV2_Multiserver_lock"
9 }
10
11 function world_screenname {
12         echo "Elidragon v2 - $1"
13 }
14
15 function multiserver_screenname {
16         echo "Elidragon v2 - Multiserver"
17 }
18
19 function kill_world {
20         kill `cat \`world_lock $1\``
21 }
22
23 function kill_multiserver {
24         kill -2 `cat \`multiserver_lock\``
25 }
26
27 function world_running {
28         return $([ -f `world_lock $1` ])
29 }
30
31 function multiserver_running {
32         return $([ -f `multiserver_lock` ])
33 }
34
35 function assert_running {
36         if ! world_running $1; then
37                 echo -e "\e[31mWorld $1 is not running\e[0m"
38                 if [ -z $2 ]; then
39                         exit 1
40                 else
41                         return 1
42                 fi
43         fi
44 }
45
46 function assert_not_running {
47         if world_running $1; then
48                 echo -e "\e[31mWorld $1 is already running\e[0m"
49                 if [ -z $2 ]; then
50                         exit 1
51                 else
52                         return 1
53                 fi
54         fi
55 }
56
57 function loop_worlds {
58         WORLDS=`ls worlds`
59         for WORLD in $WORLDS; do
60                 $1 $WORLD
61         done
62 }
63
64 function run_one_or_all {
65         if [ -z $2 ]; then
66                 loop_worlds $1
67                 return 0
68         else
69                 $1 $2
70                 return 1
71         fi
72 }
73
74 function run_in_screen {
75         screen -dmS $1 bash -c "
76                 touch $2
77                 while [ -f $2; ] do
78                         bash -c \"
79                                 echo \\$\\$ > $2
80                                 exec $3
81                         \"
82                 done
83         "
84 }
85
86 function start_multiserver {
87         echo -n "Starting Multiserver... "
88         if multiserver_running; then
89                 echo -e "\e[31mMultiserver is already running\e[0m"
90         else
91                 run_in_screen `multiserver_screenname` `multiserver_lock` "~/go/bin/multiserver"
92                 echo -e "\e[32mDone\e[0m"
93         fi
94 }
95
96 function stop_multiserver {
97         echo -n "Stopping Multiserver... "
98         if multiserver_running; then
99                 kill_multiserver
100                 rm `multiserver_lock`
101
102                 echo -e "\e[32mDone\e[0m"
103         else
104                 echo -e "\e[31mMultiserver is not running\e[0m"
105         fi
106 }
107
108 function restart_multiserver {
109         echo -n "Multiserver..."
110         if multiserver_running; then
111                 kill_multiserver
112
113                 echo -e "\e[32mDone\e[0m"
114         else
115                 echo -e "\e[31mMultiserver is not running\e[0m"
116         fi
117 }
118
119 function start_world {
120         echo -n "Starting $1... "
121         if assert_not_running $1 "true"; then
122                 run_in_screen `world_screenname $1` `world_lock $1` "minetest --server --terminal --world worlds/$1 --config worlds/$1/minetest.conf --logfile worlds/$1/debug.txt"
123                 echo -e "\e[32mDone\e[0m"
124         fi
125 }
126
127 function stop_world {
128         echo -n "Stopping $1..."
129         if assert_running $1 "true"; then
130                 kill_world $1
131                 rm `world_lock $1`
132
133                 echo -e "\e[32mDone\e[0m"
134         fi
135 }
136
137 function restart_world {
138         echo -n "Restarting $1..."
139         if assert_running $1 "true"; then
140                 kill_world $1
141
142                 echo -e "\e[32mDone\e[0m"
143         fi
144 }