home · contact · privacy
69c959dcab8f633ab03fa514d4d47696e997e964
[plomrogue] / start_server_client_union.sh
1 #!/bin/sh
2
3 # Abort the script on error.
4 set -e
5
6 # Don't let any log leftovers from before interfere.
7 if [ -e ./log ]
8 then
9     rm log
10 fi
11
12 # Give helpful message to players that want to start without compiling first.
13 if [ ! -e ./roguelike-server ]
14 then
15     echo 'No ./roguelike-server file found to execute. Try "./redo" first?'
16     false
17 fi
18 if [ ! -e ./roguelike-client ]
19 then
20     echo 'No ./roguelike-client file found to execute. Try "./redo" first?'
21     false
22 fi
23
24 # Use shell script's arguments for server and pipe server output to log file.
25 # This script's wrapper script will read it out on exit.
26 ./roguelike-server "$@" > log 2>&1 &
27
28 # Give server some time to start up and exit on error.
29 sleep 0.01
30
31 # The client should not start if the server is not running. (If the server was
32 # running in the foreground, any error exit of it so far would be caught by "set
33 # -e" above. But "set -e" is blind to error codes generated in the background.)
34 kill -0 $! 2> /dev/null
35
36 # Give server some time (max. 10 seconds) to generate its worldstate file.
37 i=0
38 while [ ! -e server/worldstate ] && [ $i -le 1000 ]
39 do
40     sleep 0.01
41     i=`expr $i + 1`
42 done
43 if [ ! -e server/worldstate ]
44 then
45     echo "Server failed generating worldstate file within given time limit."
46     false
47 fi
48
49 # Only start the interface when everything else went well.
50 kill -0 $! 2> /dev/null
51 ./roguelike-client