NewNet/nnfactorysocket.h

00001 /*  NewNet - A networking framework in C++
00002     Copyright (C) 2006 Ingmar K. Steen (iksteen@gmail.com)
00003 
00004     This program is free software; you can redistribute it and/or modify
00005     it under the terms of the GNU General Public License as published by
00006     the Free Software Foundation; either version 2 of the License, or
00007     (at your option) any later version.
00008 
00009     This program is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012     GNU General Public License for more details.
00013 
00014     You should have received a copy of the GNU General Public License
00015     along with this program; if not, write to the Free Software
00016     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018  */
00019 
00020 #ifndef NEWNET_FACTORYSOCKET_H
00021 #define NEWNET_FACTORYSOCKET_H
00022 
00023 #include "nnreactor.h"
00024 
00025 namespace NewNet
00026 {
00028 
00032   template<class ServerType, class ClientType>
00033   class FactorySocket : public Object
00034   {
00035   public:
00037 
00040     FactorySocket()
00041     {
00042       m_ServerSocket = new ServerType;
00043       m_ServerSocket->acceptedEvent.connect(this, &FactorySocket::buildClient);
00044     }
00045 
00047 
00049     FactorySocket(ServerType * serverSocket)
00050     {
00051       m_ServerSocket = serverSocket;
00052       m_ServerSocket->acceptedEvent.connect(this, &FactorySocket::buildClient);
00053     }
00054 
00056 
00058     ServerType * serverSocket()
00059     {
00060       return m_ServerSocket;
00061     }
00062 
00064 
00067     Event<ClientType *> clientAcceptedEvent;
00068 
00069   private:
00070     void buildClient(int descriptor)
00071     {
00072       ClientType * client = new ClientType();
00073       client->setDescriptor(descriptor);
00074       client->setSocketState(Socket::SocketConnected);
00075       if(m_ServerSocket->reactor())
00076         m_ServerSocket->reactor()->add(client);
00077       clientAcceptedEvent(client);
00078     }
00079 
00080     NewNet::RefPtr<ServerType> m_ServerSocket;
00081   };
00082 }
00083 
00084 #endif // NEWNET_FACTORYSOCKET_H

Generated on Sun Jan 7 14:00:01 2007 for NewNet by  doxygen 1.5.1