summaryrefslogtreecommitdiff
path: root/dedicated.c
diff options
context:
space:
mode:
authortruelight <truelight@openttd.org>2004-12-18 13:15:41 +0000
committertruelight <truelight@openttd.org>2004-12-18 13:15:41 +0000
commit88b94c3c679c281765abd2a771eec660d99a4540 (patch)
tree4f79c3e9e6717c4b847d207dd32b9dcf11ff1646 /dedicated.c
parent80a9fa962d084da762f1c5a055b0b7db6fc40a1f (diff)
downloadopenttd-88b94c3c679c281765abd2a771eec660d99a4540.tar.xz
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
Diffstat (limited to 'dedicated.c')
-rw-r--r--dedicated.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/dedicated.c b/dedicated.c
index b164181c8..10e2cb4a5 100644
--- a/dedicated.c
+++ b/dedicated.c
@@ -17,6 +17,7 @@
# include <sys/time.h> /* gettimeofday */
# include <sys/types.h>
# include <unistd.h>
+# include <signal.h>
# define STDIN 0 /* file descriptor for standard input */
#endif
@@ -24,6 +25,15 @@
static void *_dedicated_video_mem;
+#ifdef UNIX
+/* Signal handlers */
+void DedicatedSignalHandler(int sig)
+{
+ _exit_game = true;
+ signal(sig, DedicatedSignalHandler);
+}
+#endif
+
static const char *DedicatedVideoStart(char **parm) {
_screen.width = _screen.pitch = _cur_resolution[0];
_screen.height = _cur_resolution[1];
@@ -90,6 +100,12 @@ static int DedicatedVideoMainLoop() {
next_tick = (tim.tv_usec / 1000) + 30 + (tim.tv_sec * 1000);
#endif
+ /* Siganl handlers */
+#ifdef UNIX
+ signal(SIGTERM, DedicatedSignalHandler);
+ signal(SIGINT, DedicatedSignalHandler);
+#endif
+
// Load the dedicated server stuff
_is_network_server = true;
_network_dedicated = true;
@@ -107,6 +123,8 @@ static int DedicatedVideoMainLoop() {
while (true) {
InteractiveRandom(); // randomness
+ if (_exit_game) return ML_QUIT;
+
#ifdef UNIX
if (InputWaiting()) {
fgets(input_line, 200, stdin);
@@ -128,8 +146,6 @@ static int DedicatedVideoMainLoop() {
}
#endif
- if (_exit_game) return ML_QUIT;
-
#ifdef WIN32
cur_ticks = GetTickCount();
#else