socketSet.cpp
00001
00002
00003
00004
00005
00006
00007 #include "socketSet.h"
00008 #include <algorithm>
00009
00010
00011 void SocketSet::destruct(void) {
00012 for (list<TCPsocket>::iterator it = sockets.begin();
00013 it != sockets.end(); ++it) {
00014 SDLNet_TCP_DelSocket(socket_set, *it);
00015 }
00016 if (socket_set) {
00017 SDLNet_FreeSocketSet(socket_set);
00018 }
00019 }
00020
00021
00022 void SocketSet::resize(int size) {
00023 destruct();
00024 socket_set = SDLNet_AllocSocketSet(size);
00025 num_set = size;
00026
00027 for (list<TCPsocket>::iterator it = sockets.begin();
00028 it != sockets.end(); ++it) {
00029 SDLNet_TCP_AddSocket(socket_set, *it);
00030 }
00031 }
00032
00033
00034 SocketSet::SocketSet(unsigned int num) : num_set(num), socket_set(NULL) {
00035 resize(num);
00036 }
00037
00038
00039 SocketSet::SocketSet(void) : num_set(1), socket_set(NULL) {
00040 resize(1);
00041 }
00042
00043
00044 SocketSet::~SocketSet(void) {
00045 destruct();
00046 sockets.clear();
00047 }
00048
00049
00050 void SocketSet::add(SocketCtrl& socket) {
00051 if (sockets.size() >= num_set) {
00052 resize(sockets.size() * 2);
00053 }
00054
00055 TCPsocket tcp_socket = socket.getTCPsocket();
00056 SDLNet_TCP_AddSocket(socket_set, tcp_socket);
00057 sockets.push_back(tcp_socket);
00058 }
00059
00060
00061 void SocketSet::del(SocketCtrl& socket) {
00062 TCPsocket tcp_socket = socket.getTCPsocket();
00063 SDLNet_TCP_DelSocket(socket_set, tcp_socket);
00064
00065 list<TCPsocket>::iterator it
00066 = find(sockets.begin(), sockets.end(), tcp_socket);
00067 if (it != sockets.end()) {
00068 sockets.erase(it);
00069 }
00070 }
00071
00072
00073 int SocketSet::check(int timeout) {
00074 return SDLNet_CheckSockets(socket_set, timeout);
00075 }
00076