NetLink Sockets C++  1.0.0
Networking C++ Library
 All Classes Namespaces Files Functions Enumerations Enumerator Pages
socket_group.h
1 /*
2  NetLink Sockets: Networking C++ library
3  Copyright 2012 Pedro Francisco Pareja Ruiz (PedroPareja@Gmail.com)
4 
5  This file is part of NetLink Sockets.
6 
7  NetLink Sockets is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  NetLink Sockets is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with NetLink Sockets. If not, see <http://www.gnu.org/licenses/>.
19 
20 */
21 
22 #ifndef __NL_SOCKET_GROUP
23 #define __NL_SOCKET_GROUP
24 
25 #include <netlink/core.h>
26 #include <netlink/socket.h>
27 
28 NL_NAMESPACE
29 
30 using std::vector;
31 
32 
33 class SocketGroup;
34 
42 
43  public:
44 
54  virtual void exec(Socket* socket, SocketGroup* group, void* reference)=0;
55 };
56 
57 
64 class SocketGroup {
65 
66  private:
67 
68  vector<Socket*> _vSocket;
69 
70  SocketGroupCmd* _cmdOnAccept;
71  SocketGroupCmd* _cmdOnRead;
72  SocketGroupCmd* _cmdOnDisconnect;
73 
74  public:
75 
76  SocketGroup();
77 
78  void add(Socket* socket);
79  Socket* get(unsigned index) const;
80  void remove(unsigned index);
81  void remove(Socket* socket);
82 
83  size_t size() const;
84 
85  void setCmdOnAccept(SocketGroupCmd* cmd);
86  void setCmdOnRead(SocketGroupCmd* cmd);
87  void setCmdOnDisconnect(SocketGroupCmd* cmd);
88 
89  bool listen(unsigned milisec=0, void* reference = NULL);
90 };
91 
92 #include <netlink/socket_group.inline.h>
93 
94 NL_NAMESPACE_END
95 
96 #endif