Mercurial > hg > openttd
changeset 5523:1a3029f6f663 draft
(svn r7829) -Codechange: move the network (core) initialization/shutdown functions into network/core, so the can be reused in the masterserver_updater.
author | rubidium <rubidium@openttd.org> |
---|---|
date | Thu, 04 Jan 2007 18:50:40 +0000 |
parents | 8252fe7fa067 |
children | 09dab858edbf |
files | projects/openttd.vcproj projects/openttd_vs80.vcproj source.list src/network/core/core.c src/network/core/core.h src/network/network.c |
diffstat | 6 files changed, 117 insertions(+), 64 deletions(-) [+] |
line wrap: on
line diff
--- a/projects/openttd.vcproj +++ b/projects/openttd.vcproj @@ -260,6 +260,9 @@ RelativePath=".\..\src\namegen.c"> </File> <File + RelativePath=".\..\src\network\core\core.c"> + </File> + <File RelativePath=".\..\src\network\core\packet.c"> </File> <File @@ -477,6 +480,9 @@ RelativePath=".\..\src\network\core\config.h"> </File> <File + RelativePath=".\..\src\network\core\core.h"> + </File> + <File RelativePath=".\..\src\network\core\game.h"> </File> <File
--- a/projects/openttd_vs80.vcproj +++ b/projects/openttd_vs80.vcproj @@ -543,6 +543,9 @@ RelativePath=".\..\src\namegen.c"> </File> <File + RelativePath=".\..\src\network\core\core.c"> + </File> + <File RelativePath=".\..\src\network\core\packet.c"> </File> <File @@ -760,6 +763,9 @@ RelativePath=".\..\src\network\core\config.h"> </File> <File + RelativePath=".\..\src\network\core\core.h"> + </File> + <File RelativePath=".\..\src\network\core\game.h"> </File> <File
--- a/source.list +++ b/source.list @@ -32,6 +32,7 @@ mixer.c music.c namegen.c +network/core/core.c network/core/packet.c network/core/tcp.c network/core/udp.c @@ -115,6 +116,7 @@ mixer.h music.h network/core/config.h +network/core/core.h network/core/game.h network/core/os_abstraction.h network/core/packet.h
new file mode 100644 --- /dev/null +++ b/src/network/core/core.c @@ -0,0 +1,86 @@ +/* $Id$ */ + +#ifdef ENABLE_NETWORK + +#include "../../stdafx.h" +#include "os_abstraction.h" + +#ifdef __MORPHOS__ +/* the library base is required here */ +struct Library *SocketBase = NULL; +#endif + +/** + * Initializes the network core (as that is needed for some platforms + */ +void NetworkCoreInitialize(void) +{ +#if defined(__MORPHOS__) || defined(__AMIGA__) + /* + * IMPORTANT NOTE: SocketBase needs to be initialized before we use _any_ + * network related function, else: crash. + */ + DEBUG(net, 3, "[core] loading bsd socket library"); + SocketBase = OpenLibrary("bsdsocket.library", 4); + if (SocketBase == NULL) { + DEBUG(net, 0, "[core] can't open bsdsocket.library version 4, network unavailable"); + _network_available = false; + return; + } + +#if defined(__AMIGA__) + /* for usleep() implementation (only required for legacy AmigaOS builds) */ + TimerPort = CreateMsgPort(); + if (TimerPort != NULL) { + TimerRequest = (struct timerequest*)CreateIORequest(TimerPort, sizeof(struct timerequest); + if (TimerRequest != NULL) { + if (OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest*)TimerRequest, 0) == 0) { + TimerBase = TimerRequest->tr_node.io_Device; + if (TimerBase == NULL) { + // free ressources... + DEBUG(net, 0, "[core] can't initialize timer, network unavailable"); + _network_available = false; + return; + } + } + } + } +#endif // __AMIGA__ +#endif // __MORPHOS__ / __AMIGA__ + +/* Let's load the network in windows */ +#ifdef WIN32 + { + WSADATA wsa; + DEBUG(net, 3, "[core] loading windows socket library"); + if (WSAStartup(MAKEWORD(2, 0), &wsa) != 0) { + DEBUG(net, 0, "[core] WSAStartup failed, network unavailable"); + _network_available = false; + return; + } + } +#endif /* WIN32 */ +} + +/** + * Shuts down the network core (as that is needed for some platforms + */ +void NetworkCoreShutdown(void) +{ +#if defined(__MORPHOS__) || defined(__AMIGA__) + /* free allocated ressources */ +#if defined(__AMIGA__) + if (TimerBase != NULL) CloseDevice((struct IORequest*)TimerRequest); // XXX This smells wrong + if (TimerRequest != NULL) DeleteIORequest(TimerRequest); + if (TimerPort != NULL) DeleteMsgPort(TimerPort); +#endif + + if (SocketBase != NULL) CloseLibrary(SocketBase); +#endif + +#if defined(WIN32) + WSACleanup(); +#endif +} + +#endif /* ENABLE_NETWORK */
new file mode 100644 --- /dev/null +++ b/src/network/core/core.h @@ -0,0 +1,13 @@ +/* $Id$ */ + +#ifndef NETWORK_CORE_H +#define NETWORK_CORE_H + +#ifdef ENABLE_NETWORK + +void NetworkCoreInitialize(void); +void NetworkCoreShutdown(void); + +#endif /* ENABLE_NETWORK */ + +#endif /* NETWORK_CORE_H */
--- a/src/network/network.c +++ b/src/network/network.c @@ -32,16 +32,12 @@ #include "network_gamelist.h" #include "core/udp.h" #include "core/tcp.h" +#include "core/core.h" #include "network_gui.h" #include "../console.h" /* IConsoleCmdExec */ #include <stdarg.h> /* va_list */ #include "../md5.h" -#ifdef __MORPHOS__ -// the library base is required here -struct Library *SocketBase = NULL; -#endif - // The listen socket for the server static SOCKET _listensocket; @@ -1345,39 +1341,6 @@ { DEBUG(net, 3, "[core] starting network..."); -#if defined(__MORPHOS__) || defined(__AMIGA__) - /* - * IMPORTANT NOTE: SocketBase needs to be initialized before we use _any_ - * network related function, else: crash. - */ - DEBUG(net, 3, "[core] loading bsd socket library"); - SocketBase = OpenLibrary("bsdsocket.library", 4); - if (SocketBase == NULL) { - DEBUG(net, 0, "[core] can't open bsdsocket.library version 4, network unavailable"); - _network_available = false; - return; - } - -#if defined(__AMIGA__) - // for usleep() implementation (only required for legacy AmigaOS builds) - TimerPort = CreateMsgPort(); - if (TimerPort != NULL) { - TimerRequest = (struct timerequest*)CreateIORequest(TimerPort, sizeof(struct timerequest); - if (TimerRequest != NULL) { - if (OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest*)TimerRequest, 0) == 0) { - TimerBase = TimerRequest->tr_node.io_Device; - if (TimerBase == NULL) { - // free ressources... - DEBUG(net, 0, "[core] can't initialize timer, network unavailable"); - _network_available = false; - return; - } - } - } - } -#endif // __AMIGA__ -#endif // __MORPHOS__ / __AMIGA__ - // Network is available _network_available = true; _network_dedicated = false; @@ -1385,6 +1348,8 @@ _network_need_advertise = true; _network_advertise_retries = 0; + NetworkCoreInitialize(); + /* Load the ip from the openttd.cfg */ _network_server_bind_ip = inet_addr(_network_server_bind_ip_host); /* And put the data back in it in case it was an invalid ip */ @@ -1404,18 +1369,6 @@ _network_game_info.spectators_max = sp_max; } - // Let's load the network in windows - #if defined(WIN32) - { - WSADATA wsa; - DEBUG(net, 3, "[core] loading windows socket library"); - if (WSAStartup(MAKEWORD(2,0), &wsa) != 0) { - DEBUG(net, 0, "[core] WSAStartup failed, network unavailable"); - _network_available = false; - return; - } - } - #endif // WIN32 NetworkInitialize(); DEBUG(net, 3, "[core] network online, multiplayer available"); @@ -1432,20 +1385,7 @@ _network_available = false; -#if defined(__MORPHOS__) || defined(__AMIGA__) - // free allocated ressources -#if defined(__AMIGA__) - if (TimerBase != NULL) CloseDevice((struct IORequest*)TimerRequest); // XXX This smells wrong - if (TimerRequest != NULL) DeleteIORequest(TimerRequest); - if (TimerPort != NULL) DeleteMsgPort(TimerPort); -#endif - - if (SocketBase != NULL) CloseLibrary(SocketBase); -#endif - -#if defined(WIN32) - WSACleanup(); -#endif + NetworkCoreShutdown(); } #endif /* ENABLE_NETWORK */