author | Tero Marttila <terom@fixme.fi> |
Tue, 22 Jul 2008 23:11:26 +0300 | |
changeset 11183 | b8c8569d24fd |
parent 10983 | e734f891d1f6 |
permissions | -rw-r--r-- |
2186 | 1 |
/* $Id$ */ |
2 |
||
10429
1b99254f9607
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
10264
diff
changeset
|
3 |
/** @file dedicated_v.cpp Dedicated server video 'driver'. */ |
1b99254f9607
(svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents:
10264
diff
changeset
|
4 |
|
2189
d240b9097139
(svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents:
2186
diff
changeset
|
5 |
#include "../stdafx.h" |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
6 |
|
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
7 |
#ifdef ENABLE_NETWORK |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
8 |
|
2195
8960c86bf103
(svn r2710) Simplify dedicated server code a bit and don't compile it at all, if network support ist disabled
tron
parents:
2189
diff
changeset
|
9 |
#include "../openttd.h" |
2189
d240b9097139
(svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents:
2186
diff
changeset
|
10 |
#include "../debug.h" |
8619
c2434269c3eb
(svn r11684) -Codechange: split gfx.h in a type and functional header.
rubidium
parents:
8602
diff
changeset
|
11 |
#include "../gfx_func.h" |
5720
cc0ceeafaa55
(svn r7751) -Codechange: move network_* to a new network map. Furthermore move the low level network functions to network/core, so they can be reused by the masterserver and website-serverlist-updater.
rubidium
parents:
5657
diff
changeset
|
12 |
#include "../network/network.h" |
8772
8ae63fc3bbfb
(svn r11840) -Codechange: split network.h so not everything in there needs to be included when wanting to know whether we are a server.
rubidium
parents:
8750
diff
changeset
|
13 |
#include "../network/network_internal.h" |
10684 | 14 |
#include "../console_func.h" |
2189
d240b9097139
(svn r2704) Remove . from include path again, too much trouble. Also add some #ifdefs and #includes for the Windows build
tron
parents:
2186
diff
changeset
|
15 |
#include "../variables.h" |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
2791
diff
changeset
|
16 |
#include "../genworld.h" |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7374
diff
changeset
|
17 |
#include "../fileio.h" |
8647
0709611186e0
(svn r11713) -Codechange: Move some declarations and definitions in a more logical disposition
belugas
parents:
8627
diff
changeset
|
18 |
#include "../fios.h" |
7433
8e410e7ec0d7
(svn r10190) -Codechange: merged renderer and blitter to one single class API: blitter
truelight
parents:
7425
diff
changeset
|
19 |
#include "../blitter/factory.hpp" |
8626
440dfcd14c4a
(svn r11691) -Codechange: move+rename helpers.hpp and only include it when it is really needed.
rubidium
parents:
8619
diff
changeset
|
20 |
#include "../core/alloc_func.hpp" |
8750
fdd6054e7bae
(svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents:
8667
diff
changeset
|
21 |
#include "../player_func.h" |
8929
a8732ed52252
(svn r12003) -Codechange: don't declare InteractiveRandom[Range] in multiple places.
rubidium
parents:
8772
diff
changeset
|
22 |
#include "../core/random_func.hpp" |
2195
8960c86bf103
(svn r2710) Simplify dedicated server code a bit and don't compile it at all, if network support ist disabled
tron
parents:
2189
diff
changeset
|
23 |
#include "dedicated_v.h" |
781
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
24 |
|
2497
1c8460570c0d
(svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents:
2261
diff
changeset
|
25 |
#ifdef BEOS_NET_SERVER |
1c8460570c0d
(svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents:
2261
diff
changeset
|
26 |
#include <net/socket.h> |
1c8460570c0d
(svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents:
2261
diff
changeset
|
27 |
#endif |
1c8460570c0d
(svn r3023) -Fix [BeOS] fixed compilation on BeOS R5 (MYOB)
bjarni
parents:
2261
diff
changeset
|
28 |
|
781
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
29 |
#ifdef __OS2__ |
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
30 |
# include <sys/time.h> /* gettimeofday */ |
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
31 |
# include <sys/types.h> |
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
32 |
# include <unistd.h> |
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
33 |
# include <conio.h> |
2181
659d7d8d1ccd
(svn r2695) - Fix: OS/2 project update, add os2.h to dedicated_v.c
orudge
parents:
2180
diff
changeset
|
34 |
|
659d7d8d1ccd
(svn r2695) - Fix: OS/2 project update, add os2.h to dedicated_v.c
orudge
parents:
2180
diff
changeset
|
35 |
# define INCL_DOS |
659d7d8d1ccd
(svn r2695) - Fix: OS/2 project update, add os2.h to dedicated_v.c
orudge
parents:
2180
diff
changeset
|
36 |
# include <os2.h> |
659d7d8d1ccd
(svn r2695) - Fix: OS/2 project update, add os2.h to dedicated_v.c
orudge
parents:
2180
diff
changeset
|
37 |
|
781
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
38 |
# define STDIN 0 /* file descriptor for standard input */ |
810
7c51ba5a4368
(svn r1281) -Fix: the OS/2 is now finished. Fixes:
truelight
parents:
796
diff
changeset
|
39 |
|
2261
3f78323707bb
(svn r2781) Fix some of the issues with variables in .h files.
ludde
parents:
2228
diff
changeset
|
40 |
/** |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
41 |
* Switches OpenTTD to a console app at run-time, instead of a PM app |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
42 |
* Necessary to see stdout, etc. */ |
6573 | 43 |
static void OS2_SwitchToConsoleMode() |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
44 |
{ |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
45 |
PPIB pib; |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
46 |
PTIB tib; |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
47 |
|
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
48 |
DosGetInfoBlocks(&tib, &pib); |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
49 |
|
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
50 |
// Change flag from PM to VIO |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
51 |
pib->pib_ultype = 3; |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
52 |
} |
781
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
53 |
#endif |
9717ff353c17
(svn r1248) -Add: initial OS/2 support (read docs/ReadMe_OS2.txt) (orudge)
truelight
parents:
774
diff
changeset
|
54 |
|
6359
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
55 |
#if defined(UNIX) || defined(PSP) |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
56 |
# include <sys/time.h> /* gettimeofday */ |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
57 |
# include <sys/types.h> |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
58 |
# include <unistd.h> |
702
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
59 |
# include <signal.h> |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
60 |
# define STDIN 0 /* file descriptor for standard input */ |
6359
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
61 |
# if defined(PSP) |
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
62 |
# include <sys/fd_set.h> |
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
63 |
# include <sys/select.h> |
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
64 |
# endif /* PSP */ |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
65 |
|
702
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
66 |
/* Signal handlers */ |
704
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
67 |
static void DedicatedSignalHandler(int sig) |
702
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
68 |
{ |
736
53618d1ade61
(svn r1188) -Fix: [Network] Fixed that CTRL+<key> could sometimes hang a dedicated
truelight
parents:
721
diff
changeset
|
69 |
_exit_game = true; |
53618d1ade61
(svn r1188) -Fix: [Network] Fixed that CTRL+<key> could sometimes hang a dedicated
truelight
parents:
721
diff
changeset
|
70 |
signal(sig, DedicatedSignalHandler); |
702
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
71 |
} |
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
72 |
#endif |
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
73 |
|
7904
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
74 |
#if defined(WIN32) |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
75 |
# include <windows.h> /* GetTickCount */ |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
76 |
# if !defined(WINCE) |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
77 |
# include <conio.h> |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
78 |
# endif |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
79 |
# include <time.h> |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
80 |
# include <tchar.h> |
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
81 |
static HANDLE _hInputReady, _hWaitForInputHandling; |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
82 |
static HANDLE _hThread; // Thread to close |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
83 |
static char _win_console_thread_buffer[200]; |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
84 |
|
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
85 |
/* Windows Console thread. Just loop and signal when input has been received */ |
6573 | 86 |
static void WINAPI CheckForConsoleInput() |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
87 |
{ |
7904
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
88 |
#if defined(WINCE) |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
89 |
/* WinCE doesn't support console stuff */ |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
90 |
return; |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
91 |
#else |
6591
d0d51ffb0447
(svn r9074) -Codechange: win32 dedicated console now doesn't need an extra 'enter' to fully quit
glx
parents:
6573
diff
changeset
|
92 |
DWORD nb; |
d0d51ffb0447
(svn r9074) -Codechange: win32 dedicated console now doesn't need an extra 'enter' to fully quit
glx
parents:
6573
diff
changeset
|
93 |
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
94 |
while (true) { |
6591
d0d51ffb0447
(svn r9074) -Codechange: win32 dedicated console now doesn't need an extra 'enter' to fully quit
glx
parents:
6573
diff
changeset
|
95 |
ReadFile(hStdin, _win_console_thread_buffer, lengthof(_win_console_thread_buffer), &nb, NULL); |
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
96 |
/* Signal input waiting that input is read and wait for it being handled |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
97 |
* SignalObjectAndWait() should be used here, but it's unsupported in Win98< */ |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
98 |
SetEvent(_hInputReady); |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
99 |
WaitForSingleObject(_hWaitForInputHandling, INFINITE); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
100 |
} |
7904
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
101 |
#endif |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
102 |
} |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
103 |
|
6573 | 104 |
static void CreateWindowsConsoleThread() |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
105 |
{ |
1762
01d1e351aafe
(svn r2266) - Feature: it is now possible to start a dedicated server on Win98/95, for the few sadistic geeks that really want to do this (thanks for testing Hackykid). Also fix up another glitch in console output
Darkvater
parents:
1626
diff
changeset
|
106 |
DWORD dwThreadId; |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
107 |
/* Create event to signal when console input is ready */ |
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
108 |
_hInputReady = CreateEvent(NULL, false, false, NULL); |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
109 |
_hWaitForInputHandling = CreateEvent(NULL, false, false, NULL); |
10839
a62547c31fdb
(svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents:
10684
diff
changeset
|
110 |
if (_hInputReady == NULL || _hWaitForInputHandling == NULL) usererror("Cannot create console event!"); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
111 |
|
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
112 |
_hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CheckForConsoleInput, NULL, 0, &dwThreadId); |
10839
a62547c31fdb
(svn r13390) -Codechange: introduce usererror() for fatal but not openttd related errors. Now all error() will 'crash' openttd after showing the message in win32 releases (MSVC), creating a crash.log and crash.dmp (like the '!' hack used before). On the other hand, usererror() will just close the game. So use error() only when it can be helpful to debugging, else use usererror().
glx
parents:
10684
diff
changeset
|
113 |
if (_hThread == NULL) usererror("Cannot create console thread!"); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
114 |
|
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5168
diff
changeset
|
115 |
DEBUG(driver, 2, "Windows console thread started"); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
116 |
} |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
117 |
|
6573 | 118 |
static void CloseWindowsConsoleThread() |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
119 |
{ |
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
120 |
CloseHandle(_hThread); |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
121 |
CloseHandle(_hInputReady); |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
122 |
CloseHandle(_hWaitForInputHandling); |
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5168
diff
changeset
|
123 |
DEBUG(driver, 2, "Windows console thread shut down"); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
124 |
} |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
125 |
|
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
126 |
#endif |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
127 |
|
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
128 |
|
7374
54c06f06ecc8
(svn r10121) -Codechange: split renderer from rest of code; no longer any code directly accesses the video-buffer
truelight
parents:
7111
diff
changeset
|
129 |
static void *_dedicated_video_mem; |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
130 |
|
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7374
diff
changeset
|
131 |
extern bool SafeSaveOrLoad(const char *filename, int mode, int newgm, Subdirectory subdir); |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
132 |
extern void SwitchMode(int new_mode); |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
133 |
|
7666
a5fccd76176a
(svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents:
7433
diff
changeset
|
134 |
static FVideoDriver_Dedicated iFVideoDriver_Dedicated; |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
135 |
|
7666
a5fccd76176a
(svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents:
7433
diff
changeset
|
136 |
|
a5fccd76176a
(svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents:
7433
diff
changeset
|
137 |
const char *VideoDriver_Dedicated::Start(const char * const *parm) |
1301
313804601383
(svn r1805) Teach the driver layer a few things about const correctness
tron
parents:
1299
diff
changeset
|
138 |
{ |
7374
54c06f06ecc8
(svn r10121) -Codechange: split renderer from rest of code; no longer any code directly accesses the video-buffer
truelight
parents:
7111
diff
changeset
|
139 |
int bpp = BlitterFactoryBase::GetCurrentBlitter()->GetScreenDepth(); |
54c06f06ecc8
(svn r10121) -Codechange: split renderer from rest of code; no longer any code directly accesses the video-buffer
truelight
parents:
7111
diff
changeset
|
140 |
if (bpp == 0) _dedicated_video_mem = NULL; |
10983
e734f891d1f6
(svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents:
10839
diff
changeset
|
141 |
else _dedicated_video_mem = MallocT<byte>(_cur_resolution.width * _cur_resolution.height * (bpp / 8)); |
7374
54c06f06ecc8
(svn r10121) -Codechange: split renderer from rest of code; no longer any code directly accesses the video-buffer
truelight
parents:
7111
diff
changeset
|
142 |
|
10983
e734f891d1f6
(svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents:
10839
diff
changeset
|
143 |
_screen.width = _screen.pitch = _cur_resolution.width; |
e734f891d1f6
(svn r13537) -Fix [FS#2090](r13523): QSortT won't work this way, use Dimension instead of uint16[2] for resolutions
smatz
parents:
10839
diff
changeset
|
144 |
_screen.height = _cur_resolution.height; |
10264
cf7e5534376a
(svn r12796) -Fix: the dedicated blitter did segfault too, like the null blitter did.
rubidium
parents:
8929
diff
changeset
|
145 |
ScreenSizeChanged(); |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
146 |
|
5657
54c99d0f6ba4
(svn r7602) -Fix (r7565): MSVC2003 and lower don't support variadic macros, so work around
Darkvater
parents:
5568
diff
changeset
|
147 |
SetDebugString("net=6"); |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
148 |
|
7904
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
149 |
#if defined(WINCE) |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
150 |
/* WinCE doesn't support console stuff */ |
238db1373ca3
(svn r10781) -Fix: ported more pieces to WinCE, so it compiles a bit more
truelight
parents:
7666
diff
changeset
|
151 |
#elif defined(WIN32) |
5168
10a8dc9788d7
(svn r7278) -Codechange: [win32] Add UNICODE support so it should compile on OS's using UNICODE
Darkvater
parents:
4891
diff
changeset
|
152 |
// For win32 we need to allocate a console (debug mode does the same) |
626
78c7e1c9f7c5
(svn r1056) -Fix: [Network] Give the dedicated-server always a console in windows (sign_de)
truelight
parents:
543
diff
changeset
|
153 |
CreateConsole(); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
154 |
CreateWindowsConsoleThread(); |
5168
10a8dc9788d7
(svn r7278) -Codechange: [win32] Add UNICODE support so it should compile on OS's using UNICODE
Darkvater
parents:
4891
diff
changeset
|
155 |
SetConsoleTitle(_T("OpenTTD Dedicated Server")); |
626
78c7e1c9f7c5
(svn r1056) -Fix: [Network] Give the dedicated-server always a console in windows (sign_de)
truelight
parents:
543
diff
changeset
|
156 |
#endif |
78c7e1c9f7c5
(svn r1056) -Fix: [Network] Give the dedicated-server always a console in windows (sign_de)
truelight
parents:
543
diff
changeset
|
157 |
|
810
7c51ba5a4368
(svn r1281) -Fix: the OS/2 is now finished. Fixes:
truelight
parents:
796
diff
changeset
|
158 |
#ifdef __OS2__ |
7c51ba5a4368
(svn r1281) -Fix: the OS/2 is now finished. Fixes:
truelight
parents:
796
diff
changeset
|
159 |
// For OS/2 we also need to switch to console mode instead of PM mode |
7c51ba5a4368
(svn r1281) -Fix: the OS/2 is now finished. Fixes:
truelight
parents:
796
diff
changeset
|
160 |
OS2_SwitchToConsoleMode(); |
7c51ba5a4368
(svn r1281) -Fix: the OS/2 is now finished. Fixes:
truelight
parents:
796
diff
changeset
|
161 |
#endif |
7c51ba5a4368
(svn r1281) -Fix: the OS/2 is now finished. Fixes:
truelight
parents:
796
diff
changeset
|
162 |
|
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5168
diff
changeset
|
163 |
DEBUG(driver, 1, "Loading dedicated server"); |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
164 |
return NULL; |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
165 |
} |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
166 |
|
7666
a5fccd76176a
(svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents:
7433
diff
changeset
|
167 |
void VideoDriver_Dedicated::Stop() |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
168 |
{ |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
169 |
#ifdef WIN32 |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
170 |
CloseWindowsConsoleThread(); |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
171 |
#endif |
1109
1bab892228cd
(svn r1610) Remove trailing whitespace (last time ever, i hope)
tron
parents:
1090
diff
changeset
|
172 |
free(_dedicated_video_mem); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
173 |
} |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
174 |
|
7666
a5fccd76176a
(svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents:
7433
diff
changeset
|
175 |
void VideoDriver_Dedicated::MakeDirty(int left, int top, int width, int height) {} |
a5fccd76176a
(svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents:
7433
diff
changeset
|
176 |
bool VideoDriver_Dedicated::ChangeResolution(int w, int h) { return false; } |
8667
c916a5375166
(svn r11734) -Change: Allow ToggleFullScreen to return the result of the operation' attempt. Previously, only visual clues were available.
belugas
parents:
8647
diff
changeset
|
177 |
bool VideoDriver_Dedicated::ToggleFullscreen(bool fs) { return false; } |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
178 |
|
6359
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
179 |
#if defined(UNIX) || defined(__OS2__) || defined(PSP) |
6573 | 180 |
static bool InputWaiting() |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
181 |
{ |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
182 |
struct timeval tv; |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
183 |
fd_set readfds; |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
184 |
|
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
185 |
tv.tv_sec = 0; |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
186 |
tv.tv_usec = 1; |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
187 |
|
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
188 |
FD_ZERO(&readfds); |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
189 |
FD_SET(STDIN, &readfds); |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
190 |
|
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
191 |
/* don't care about writefds and exceptfds: */ |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
192 |
return select(STDIN + 1, &readfds, NULL, NULL, &tv) > 0; |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
193 |
} |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
194 |
|
6573 | 195 |
static uint32 GetTime() |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
196 |
{ |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
197 |
struct timeval tim; |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
198 |
|
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
199 |
gettimeofday(&tim, NULL); |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
200 |
return tim.tv_usec / 1000 + tim.tv_sec * 1000; |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
201 |
} |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
202 |
|
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
203 |
#else |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
204 |
|
6573 | 205 |
static bool InputWaiting() |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
206 |
{ |
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
207 |
return WaitForSingleObject(_hInputReady, 1) == WAIT_OBJECT_0; |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
208 |
} |
1109
1bab892228cd
(svn r1610) Remove trailing whitespace (last time ever, i hope)
tron
parents:
1090
diff
changeset
|
209 |
|
6573 | 210 |
static uint32 GetTime() |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
211 |
{ |
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
212 |
return GetTickCount(); |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
213 |
} |
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
214 |
|
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
215 |
#endif |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
216 |
|
6573 | 217 |
static void DedicatedHandleKeyInput() |
704
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
218 |
{ |
721
20591395836b
(svn r1173) -Fix: [Network] Console input in dedicated server for windows was not
truelight
parents:
720
diff
changeset
|
219 |
static char input_line[200] = ""; |
704
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
220 |
|
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
221 |
if (!InputWaiting()) return; |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
222 |
|
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
223 |
if (_exit_game) return; |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
224 |
|
6359
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
225 |
#if defined(UNIX) || defined(__OS2__) || defined(PSP) |
4891
74c29446124e
(svn r6835) - Fix: Pressing ^D (EOF) at a dedicated console caused it to repeat the last command, instead of doing nothing.
peter1138
parents:
4848
diff
changeset
|
226 |
if (fgets(input_line, lengthof(input_line), stdin) == NULL) return; |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
227 |
#else |
4599
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
228 |
/* Handle console input, and singal console thread, it can accept input again */ |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
229 |
strncpy(input_line, _win_console_thread_buffer, lengthof(input_line)); |
acdc5cac5b93
(svn r6449) -Fix (Win32): The dedicated server could overwrite the keyboard input buffer
Darkvater
parents:
4300
diff
changeset
|
230 |
SetEvent(_hWaitForInputHandling); |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
231 |
#endif |
736
53618d1ade61
(svn r1188) -Fix: [Network] Fixed that CTRL+<key> could sometimes hang a dedicated
truelight
parents:
721
diff
changeset
|
232 |
|
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
233 |
/* XXX - strtok() does not 'forget' \n\r if it is the first character! */ |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
234 |
strtok(input_line, "\r\n"); // Forget about the final \n (or \r) |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
235 |
{ /* Remove any special control characters */ |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
236 |
uint i; |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
237 |
for (i = 0; i < lengthof(input_line); i++) { |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
238 |
if (input_line[i] == '\n' || input_line[i] == '\r') // cut missed beginning '\0' |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
239 |
input_line[i] = '\0'; |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
240 |
|
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
241 |
if (input_line[i] == '\0') |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
242 |
break; |
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
243 |
|
8450
dce58137301f
(svn r11510) -Codechange: merge the IS_*INSIDE* functions and rename them fitting to the naming style
skidd13
parents:
7904
diff
changeset
|
244 |
if (!IsInsideMM(input_line[i], ' ', 256)) |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
245 |
input_line[i] = ' '; |
704
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
246 |
} |
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
247 |
} |
1046
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
248 |
|
d46ccd96c40f
(svn r1547) -Feature: windows dedicated (if anyone would run that, but ok), is now functioning correctly. There is no other way but to create a new thread, but that's only MS braindeadness
darkvater
parents:
915
diff
changeset
|
249 |
IConsoleCmdExec(input_line); // execute command |
704
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
250 |
} |
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
251 |
|
7666
a5fccd76176a
(svn r10444) -Codechange: switch to c++ classes and inheritance for sound/music/video drivers, using self-registration based on the blitter-model.
peter1138
parents:
7433
diff
changeset
|
252 |
void VideoDriver_Dedicated::MainLoop() |
704
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
253 |
{ |
5832
28aa8ad3bb04
(svn r8028) -Fix: overflow of ticks was not handled properly, possibly resulting a non-reacting gameserver/gameclient.
rubidium
parents:
5726
diff
changeset
|
254 |
uint32 cur_ticks = GetTime(); |
28aa8ad3bb04
(svn r8028) -Fix: overflow of ticks was not handled properly, possibly resulting a non-reacting gameserver/gameclient.
rubidium
parents:
5726
diff
changeset
|
255 |
uint32 next_tick = cur_ticks + 30; |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
256 |
|
770
89dab23f04ca
(svn r1236) MorphOS: added make release like in OSX (tokai)
bjarni
parents:
736
diff
changeset
|
257 |
/* Signal handlers */ |
6359
fb2fe9142034
(svn r8756) [PSP] -Fix: made the dedicated code compile with PSP. It is almost UNIX, just it needs more includes ;)
truelight
parents:
5838
diff
changeset
|
258 |
#if defined(UNIX) || defined(PSP) |
702
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
259 |
signal(SIGTERM, DedicatedSignalHandler); |
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
260 |
signal(SIGINT, DedicatedSignalHandler); |
736
53618d1ade61
(svn r1188) -Fix: [Network] Fixed that CTRL+<key> could sometimes hang a dedicated
truelight
parents:
721
diff
changeset
|
261 |
signal(SIGQUIT, DedicatedSignalHandler); |
702
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
262 |
#endif |
e8f37893243e
(svn r1152) -Add: [Network] Added signal handling (GeniusDex)
truelight
parents:
626
diff
changeset
|
263 |
|
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
264 |
// Load the dedicated server stuff |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
265 |
_is_network_server = true; |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
266 |
_network_dedicated = true; |
4848
56549aa3e234
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4599
diff
changeset
|
267 |
_network_playas = PLAYER_SPECTATOR; |
56549aa3e234
(svn r6774) -Codechange: Rename the badly named OWNER_SPECTATOR to PLAYER_SPECTATOR and
Darkvater
parents:
4599
diff
changeset
|
268 |
_local_player = PLAYER_SPECTATOR; |
1414
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
269 |
|
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
270 |
/* If SwitchMode is SM_LOAD, it means that the user used the '-g' options */ |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
271 |
if (_switch_mode != SM_LOAD) { |
4300
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
2791
diff
changeset
|
272 |
StartNewGameWithoutGUI(GENERATE_NEW_SEED); |
687a17c9c557
(svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
2791
diff
changeset
|
273 |
SwitchMode(_switch_mode); |
1414
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
274 |
_switch_mode = SM_NONE; |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
275 |
} else { |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
276 |
_switch_mode = SM_NONE; |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
277 |
/* First we need to test if the savegame can be loaded, else we will end up playing the |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
278 |
* intro game... */ |
7425
350b9265b7a2
(svn r10182) -Codechange: rewrite most part of the file loading/searching to be more flexible.
rubidium
parents:
7374
diff
changeset
|
279 |
if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, BASE_DIR)) { |
1414
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
280 |
/* Loading failed, pop out.. */ |
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5168
diff
changeset
|
281 |
DEBUG(net, 0, "Loading requested map failed, aborting"); |
1414
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
282 |
_networking = false; |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
283 |
} else { |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
284 |
/* We can load this game, so go ahead */ |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
285 |
SwitchMode(SM_LOAD); |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
286 |
} |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
287 |
} |
d7fa2709bf86
(svn r1918) -Fix: [ 1101874 ] Dedicated server now accepts '-g' (load game) as param
truelight
parents:
1406
diff
changeset
|
288 |
|
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
289 |
// Done loading, start game! |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
290 |
|
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
291 |
if (!_networking) { |
5568
75f13d7bfaed
(svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents:
5168
diff
changeset
|
292 |
DEBUG(net, 0, "Dedicated server could not be started, aborting"); |
2228 | 293 |
return; |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
294 |
} |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
295 |
|
2228 | 296 |
while (!_exit_game) { |
5832
28aa8ad3bb04
(svn r8028) -Fix: overflow of ticks was not handled properly, possibly resulting a non-reacting gameserver/gameclient.
rubidium
parents:
5726
diff
changeset
|
297 |
uint32 prev_cur_ticks = cur_ticks; // to check for wrapping |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
298 |
InteractiveRandom(); // randomness |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
299 |
|
704
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
300 |
if (!_dedicated_forks) |
a526dc96fbfc
(svn r1154) -Add: [Network] Forked dedicated server (start openttd with -Df) (GeniusDex)
truelight
parents:
702
diff
changeset
|
301 |
DedicatedHandleKeyInput(); |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
302 |
|
2180
efe39e3d3fb4
(svn r2694) Various smaller changes: eol-style, static, code simplification
tron
parents:
2177
diff
changeset
|
303 |
cur_ticks = GetTime(); |
5832
28aa8ad3bb04
(svn r8028) -Fix: overflow of ticks was not handled properly, possibly resulting a non-reacting gameserver/gameclient.
rubidium
parents:
5726
diff
changeset
|
304 |
if (cur_ticks >= next_tick || cur_ticks < prev_cur_ticks) { |
28aa8ad3bb04
(svn r8028) -Fix: overflow of ticks was not handled properly, possibly resulting a non-reacting gameserver/gameclient.
rubidium
parents:
5726
diff
changeset
|
305 |
next_tick = cur_ticks + 30; |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
306 |
|
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
307 |
GameLoop(); |
7111
269c76b5b987
(svn r9835) -Codechange: use Pixel typedef instead of byte where ever possible
truelight
parents:
6591
diff
changeset
|
308 |
_screen.dst_ptr = _dedicated_video_mem; |
543
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
309 |
UpdateWindows(); |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
310 |
} |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
311 |
CSleep(1); |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
312 |
} |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
313 |
} |
e3b43338096b
(svn r942) -Merged branch/network back into the trunk
truelight
parents:
diff
changeset
|
314 |
|
2195
8960c86bf103
(svn r2710) Simplify dedicated server code a bit and don't compile it at all, if network support ist disabled
tron
parents:
2189
diff
changeset
|
315 |
#endif /* ENABLE_NETWORK */ |