socketSet.cpp

00001 /*
00002   TCP/IPソケットの受信イベント管理
00003   Satofumi KAMIMURA
00004   $Id$
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 

Generated on Mon Apr 13 22:52:01 2009 by  doxygen 1.5.7.1