/*
NetLink Sockets: Networking C++ library
Copyright 2012 Pedro Francisco Pareja Ruiz (PedroPareja@Gmail.com)
This file is part of NetLink Sockets.
NetLink Sockets is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
NetLink Sockets is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with NetLink Sockets. If not, see .
*/
#ifndef __NL_SOCKET_GROUP
#define __NL_SOCKET_GROUP
#include "core.h"
#include "socket.h"
NL_NAMESPACE
using std::vector;
class SocketGroup;
/**
* @class SocketGroupCmd socket_group.h netlink/socket_group.h
*
* Class to be used as base for SocketGroup callback function implementing classes
*/
class SocketGroupCmd {
public:
/**
* Function to be implemented for the callback. The parameters will be provided by the
* SocketGroup::listen() function when calling
*
* @param socket Socket which triggered the callback
* @param group SocketGroup which triggered the callback
* @param reference Pointer passed to listen function to be used here
*/
virtual void exec(Socket* socket, SocketGroup* group, void* reference)=0;
};
/**
* @class SocketGroup socket_group.h netlink/socket_group.h
*
* To manage sockets and connections
*/
class SocketGroup {
private:
vector _vSocket;
SocketGroupCmd* _cmdOnAccept;
SocketGroupCmd* _cmdOnRead;
SocketGroupCmd* _cmdOnDisconnect;
public:
SocketGroup();
void add(Socket* socket);
Socket* get(unsigned index) const;
void remove(unsigned index);
void remove(Socket* socket);
size_t size() const;
void setCmdOnAccept(SocketGroupCmd* cmd);
void setCmdOnRead(SocketGroupCmd* cmd);
void setCmdOnDisconnect(SocketGroupCmd* cmd);
bool listen(unsigned milisec=0, void* reference = NULL);
};
#include "socket_group.inline.h"
NL_NAMESPACE_END
#endif