diff options
| author | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-08-02 14:12:48 +0000 |
|---|---|---|
| committer | oroborus <oroborus@0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e> | 2008-08-02 14:12:48 +0000 |
| commit | 1a592767c6e34bdeb7f30fa063b5e24c57d45894 (patch) | |
| tree | e21ebcc5bc79cc5b6a6dfb4b9635ff95c52842c4 /src/base/udp_server.c | |
| parent | 6b805af42cba72e190d94ffa6d1dd7e44d9dfb61 (diff) | |
- gameserver podporuje clientov z IPv4-UDP IPv4-TCP IPv6-UDP IPv6-TCP
- client sa moze pripojit na gameserver, ktory podporuje IPv4-UDP IPv4-TCP IPv6-UDP IPv6-TCP ( nie, nie je to
samozrejmost :) )
- client ma parametre --tcp , --udp ( ak sa neuvedie, implicitne sa berie --udp )
- btw. ladit, ladit, ladit
git-svn-id: http://opensvn.csie.org/tuxanci_ng@187 0ee4d065-81f0-4d1e-b06c-ff20ad07cc3e
Diffstat (limited to 'src/base/udp_server.c')
| -rw-r--r-- | src/base/udp_server.c | 166 |
1 files changed, 35 insertions, 131 deletions
diff --git a/src/base/udp_server.c b/src/base/udp_server.c index cb0aaba..63a24ea 100644 --- a/src/base/udp_server.c +++ b/src/base/udp_server.c @@ -40,6 +40,7 @@ #include "udp.h" #include "udp_server.h" +#include "serverSelect.h" static sock_udp_t *sock_server_udp; static sock_udp_t *sock_server_udp_second; @@ -75,59 +76,45 @@ void destroyUdpClient(client_t *p) destroyAnyClient(p); } -int initUdpServer(char *ip, int port, int proto) +int initUdpServer(char *ip4, int port4, char *ip6, int port6) { - sock_server_udp = bindUdpSocket(ip, port, proto); - sock_server_udp_second = NULL; - - if( sock_server_udp == NULL ) - { - return -1; - } - - printf("server listen UDP port %s %d\n", ip, port); - - return 0; -} + int ret; -#ifdef OLD_PUBLIC_SERVER - -int initUdpPublicServer(char *ip4, int port4, char *ip6, int port6) -{ - sock_server_udp = NULL; - sock_server_udp_second = NULL; + ret = 0; if( ip4 != NULL ) { sock_server_udp = bindUdpSocket(ip4, port4, PROTO_UDPv4); - - if( sock_server_udp == NULL ) + + if( sock_server_udp != NULL ) { - return -1; + ret++; + printf("server listen UDP port %s %d\n", ip4, port4); + } + else + { + printf("server listen UDP port %s %d -- failed !!!\n", ip4, port4); } - - printf("server listen UDP port %s %d\n", ip4, port4); } if( ip6 != NULL ) { sock_server_udp_second = bindUdpSocket(ip6, port6, PROTO_UDPv6); - - if( sock_server_udp_second == NULL ) + + if( sock_server_udp_second != NULL ) { - return -1; + ret++; + printf("server listen UDP port %s %d\n", ip6, port6); + } + else + { + printf("server listen UDP port %s %d -- failed !!!\n", ip6, port6); } - - printf("server listen UDP port %s %d\n", ip6, port6); } - initServer(); - - return 0; + return ret; } -#endif - static void eventCreateNewUdpClient(sock_udp_t *socket_udp) { list_t *listClient; @@ -156,7 +143,8 @@ static client_t* findUdpClient(sock_udp_t *sock_udp) client = (client_t *)listClient->list[i]; - if( getSockUdpPort(client->socket_udp) == port ) + if( client->type == CLIENT_TYPE_UDP && + getSockUdpPort(client->socket_udp) == port ) { return client; } @@ -218,130 +206,46 @@ static void eventClientUdpSelect(sock_udp_t *sock_server) addList(client->listRecvMsg, strdup(listRecvMsg) ); } -static int selectServerUdpSocket() +void setServerUdpSelect() { - struct timeval tv; - fd_set readfds; - fd_set errorfds; - int max_fd; - int ret; - int count; - -#ifndef PUBLIC_SERVER - tv.tv_sec = 0; - tv.tv_usec = 0; -#endif - -#ifdef PUBLIC_SERVER - tv.tv_sec = 0; - tv.tv_usec = 1000; -#endif - - FD_ZERO(&readfds); - FD_ZERO(&errorfds); - - max_fd = 0; - count = 0; - if( sock_server_udp != NULL ) { - FD_SET(sock_server_udp->sock, &errorfds); - FD_SET(sock_server_udp->sock, &readfds); - - if( sock_server_udp->sock > max_fd ) - { - max_fd = sock_server_udp->sock; - } + addSockToSelect(sock_server_udp->sock); } if( sock_server_udp_second != NULL ) { - FD_SET(sock_server_udp_second->sock, &readfds); - FD_SET(sock_server_udp_second->sock, &errorfds); - - if( sock_server_udp_second->sock > max_fd ) - { - max_fd = sock_server_udp_second->sock; - } + addSockToSelect(sock_server_udp_second->sock); } +} - //printf("select..\n"); - -#ifdef PUBLIC_SERVER - list_t *listClient; - listClient = getListServerClient(); - - if( listClient->count == 0 ) - { - ret = select(max_fd+1, &readfds, (fd_set *)NULL, &errorfds, NULL); - setServerTimer(); - } - else - { - ret = select(max_fd+1, &readfds, (fd_set *)NULL,&errorfds, &tv); - } -#endif +int selectServerUdpSocket() +{ + int count; -#ifndef PUBLIC_SERVER - ret = select(max_fd+1, &readfds, (fd_set *)NULL,&errorfds, &tv); -#endif + count = 0; - if( ret < 0 ) - { - //printf("select ret = %d\n", ret); - return 0; - } - if( sock_server_udp != NULL ) { - if( FD_ISSET(sock_server_udp->sock, &readfds) ) + if( isChangeSockInSelect(sock_server_udp->sock) ) { eventClientUdpSelect(sock_server_udp); - count = 1; - } - - if( FD_ISSET(sock_server_udp->sock, &errorfds) ) - { - printf("error\n"); + count++; } } if( sock_server_udp_second != NULL ) { - if( FD_ISSET(sock_server_udp_second->sock, &readfds) ) + if( isChangeSockInSelect(sock_server_udp_second->sock) ) { eventClientUdpSelect(sock_server_udp_second); - count = 1; - } - - if( FD_ISSET(sock_server_udp_second->sock, &errorfds) ) - { - printf("error\n"); + count++; } } return count; } -void eventUdpServer() -{ -#ifndef PUBLIC_SERVER - - int count; - -#ifdef SUPPORT_NET_UNIX_UDP - do{ - count = selectServerUdpSocket(); - }while( count > 0 ); -#endif - -#endif - -#ifdef PUBLIC_SERVER - selectServerUdpSocket(); -#endif -} - void quitUdpServer() { if( sock_server_udp != NULL ) |