summaryrefslogtreecommitdiff
path: root/src/base/net_multiplayer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/net_multiplayer.c')
-rw-r--r--src/base/net_multiplayer.c172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/base/net_multiplayer.c b/src/base/net_multiplayer.c
new file mode 100644
index 0000000..bc8ecab
--- /dev/null
+++ b/src/base/net_multiplayer.c
@@ -0,0 +1,172 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <unistd.h>
+
+#include "base/main.h"
+#include "base/list.h"
+#include "base/tux.h"
+#include "base/item.h"
+#include "base/arenaFile.h"
+#include "base/net_multiplayer.h"
+#include "base/server.h"
+
+#ifdef SUPPORT_NET_UNIX_UDP
+#include "net_unix/udp.h"
+#endif
+
+#ifdef SUPPORT_NET_SDL_UDP
+#include "net_sdl/sdl_udp.h"
+#endif
+
+#ifndef PUBLIC_SERVER
+#include "screen/screen_setting.h"
+#include "screen/screen_choiceArena.h"
+
+#include "client/screen.h"
+#include "client/client.h"
+#endif
+
+static int netGameType;
+
+int getNetTypeGame()
+{
+ return netGameType;
+}
+
+#ifdef PUBLIC_SERVER
+
+int initNetMulitplayerPublicServer(char *ip4, int port4, char *ip6, int port6)
+{
+ netGameType = NET_GAME_TYPE_SERVER;
+ return initUdpPublicServer(ip4, port4, ip6, port6);
+}
+#endif
+
+int initNetMuliplayer(int type, char *ip, int port, int proto)
+{
+ netGameType = type;
+
+ switch( netGameType )
+ {
+ case NET_GAME_TYPE_NONE :
+ break;
+
+ case NET_GAME_TYPE_SERVER :
+#ifdef SUPPORT_NET_UNIX_UDP
+ if( initUdpServer(ip, port, proto) != 0 )
+ {
+ fprintf(stderr, "Neomzem inicalizovat sietovu hru pre server !\n");
+ netGameType = NET_GAME_TYPE_NONE;
+ return -1;
+ }
+#endif
+#ifdef SUPPORT_NET_SDL_UDP
+ if( initSdlUdpServer(port) != 0 )
+ {
+ fprintf(stderr, "Neomzem inicalizovat sietovu hru pre server !\n");
+ netGameType = NET_GAME_TYPE_NONE;
+ return -1;
+ }
+#endif
+ break;
+
+#ifndef PUBLIC_SERVER
+ case NET_GAME_TYPE_CLIENT :
+#ifdef SUPPORT_NET_UNIX_UDP
+ if( initUdpClient(ip, port, proto) != 0 )
+ {
+ fprintf(stderr, "Neomzem inicalizovat sietovu hru pre clienta !\n");
+ netGameType = NET_GAME_TYPE_NONE;
+ return -1;
+ }
+#endif
+#ifdef SUPPORT_NET_SDL_UDP
+ if( initSdlUdpClient(ip, port) != 0 )
+ {
+ fprintf(stderr, "Neomzem inicalizovat sietovu hru pre clienta !\n");
+ netGameType = NET_GAME_TYPE_NONE;
+ return -1;
+ }
+#endif
+ break;
+#endif
+ default :
+ assert( ! "Premenna netGameType ma zlu hodnotu !" );
+ break;
+ }
+
+ return 0;
+}
+
+void eventNetMultiplayer()
+{
+ switch( netGameType )
+ {
+ case NET_GAME_TYPE_NONE :
+ break;
+
+ case NET_GAME_TYPE_SERVER :
+#ifdef SUPPORT_NET_UNIX_UDP
+ eventServer();
+#endif
+#ifdef SUPPORT_NET_SDL_UDP
+ eventServer();
+#endif
+ break;
+
+#ifndef PUBLIC_SERVER
+ case NET_GAME_TYPE_CLIENT :
+#ifdef SUPPORT_NET_UNIX_UDP
+ eventPingServer();
+ selectClientUdpSocket();
+ eventServerBuffer();
+#endif
+#ifdef SUPPORT_NET_SDL_UDP
+ eventPingServer();
+ selectClientSdlUdpSocket();
+ eventServerBuffer();
+#endif
+#endif
+ break;
+ default :
+ assert( ! "Premenna netGameType ma zlu hodnotu !" );
+ break;
+ }
+}
+
+void quitNetMultiplayer()
+{
+ switch( netGameType )
+ {
+ case NET_GAME_TYPE_NONE :
+ break;
+
+ case NET_GAME_TYPE_SERVER :
+#ifdef SUPPORT_NET_UNIX_UDP
+ quitUdpServer();
+#endif
+#ifdef SUPPORT_NET_SDL_UDP
+ quitSdlUdpServer();
+#endif
+ break;
+
+#ifndef PUBLIC_SERVER
+ case NET_GAME_TYPE_CLIENT :
+#ifdef SUPPORT_NET_UNIX_UDP
+ quitUdpClient();
+#endif
+#ifdef SUPPORT_NET_SDL_UDP
+ quitSdlUdpClient();
+#endif
+ break;
+#endif
+
+ default :
+ assert( ! "Premenna netGameType ma zlu hodnotu !" );
+ break;
+ }
+
+ netGameType = NET_GAME_TYPE_NONE;
+}