]> git.sesse.net Git - casparcg/blob - SFML-1.6/include/SFML/Network/Selector.hpp
(no commit message)
[casparcg] / SFML-1.6 / include / SFML / Network / Selector.hpp
1 ////////////////////////////////////////////////////////////\r
2 //\r
3 // SFML - Simple and Fast Multimedia Library\r
4 // Copyright (C) 2007-2009 Laurent Gomila (laurent.gom@gmail.com)\r
5 //\r
6 // This software is provided 'as-is', without any express or implied warranty.\r
7 // In no event will the authors be held liable for any damages arising from the use of this software.\r
8 //\r
9 // Permission is granted to anyone to use this software for any purpose,\r
10 // including commercial applications, and to alter it and redistribute it freely,\r
11 // subject to the following restrictions:\r
12 //\r
13 // 1. The origin of this software must not be misrepresented;\r
14 //    you must not claim that you wrote the original software.\r
15 //    If you use this software in a product, an acknowledgment\r
16 //    in the product documentation would be appreciated but is not required.\r
17 //\r
18 // 2. Altered source versions must be plainly marked as such,\r
19 //    and must not be misrepresented as being the original software.\r
20 //\r
21 // 3. This notice may not be removed or altered from any source distribution.\r
22 //\r
23 ////////////////////////////////////////////////////////////\r
24 \r
25 #ifndef SFML_SELECTOR_HPP\r
26 #define SFML_SELECTOR_HPP\r
27 \r
28 ////////////////////////////////////////////////////////////\r
29 // Headers\r
30 ////////////////////////////////////////////////////////////\r
31 #include <SFML/Network/SocketUDP.hpp>\r
32 #include <SFML/Network/SocketTCP.hpp>\r
33 #include <SFML/Network/SelectorBase.hpp>\r
34 #include <map>\r
35 \r
36 \r
37 namespace sf\r
38 {\r
39 ////////////////////////////////////////////////////////////\r
40 /// Selector allow reading from multiple sockets\r
41 /// without blocking. It's a kind of multiplexer\r
42 ////////////////////////////////////////////////////////////\r
43 template <typename Type>\r
44 class Selector : private SelectorBase\r
45 {\r
46 public :\r
47 \r
48     ////////////////////////////////////////////////////////////\r
49     /// Add a socket to watch\r
50     ///\r
51     /// \param Socket : Socket to add\r
52     ///\r
53     ////////////////////////////////////////////////////////////\r
54     void Add(Type Socket);\r
55 \r
56     ////////////////////////////////////////////////////////////\r
57     /// Remove a socket\r
58     ///\r
59     /// \param Socket : Socket to remove\r
60     ///\r
61     ////////////////////////////////////////////////////////////\r
62     void Remove(Type Socket);\r
63 \r
64     ////////////////////////////////////////////////////////////\r
65     /// Remove all sockets\r
66     ///\r
67     ////////////////////////////////////////////////////////////\r
68     void Clear();\r
69 \r
70     ////////////////////////////////////////////////////////////\r
71     /// Wait and collect sockets which are ready for reading.\r
72     /// This functions will return either when at least one socket\r
73     /// is ready, or when the given time is out\r
74     ///\r
75     /// \param Timeout : Timeout, in seconds (0 by default : no timeout)\r
76     ///\r
77     /// \return Number of sockets ready to be read\r
78     ///\r
79     ////////////////////////////////////////////////////////////\r
80     unsigned int Wait(float Timeout = 0.f);\r
81 \r
82     ////////////////////////////////////////////////////////////\r
83     /// After a call to Wait(), get the Index-th socket which is\r
84     /// ready for reading. The total number of sockets ready\r
85     /// is the integer returned by the previous call to Wait()\r
86     ///\r
87     /// \param Index : Index of the socket to get\r
88     ///\r
89     /// \return The Index-th socket\r
90     ///\r
91     ////////////////////////////////////////////////////////////\r
92     Type GetSocketReady(unsigned int Index);\r
93 \r
94 private :\r
95 \r
96     ////////////////////////////////////////////////////////////\r
97     // Types\r
98     ////////////////////////////////////////////////////////////\r
99     typedef std::map<SocketHelper::SocketType, Type> SocketTable;\r
100 \r
101     ////////////////////////////////////////////////////////////\r
102     // Member data\r
103     ////////////////////////////////////////////////////////////\r
104     SocketTable mySockets; ///< Table matching the SFML socket instances with their low-level handles\r
105 };\r
106 \r
107 #include <SFML/Network/Selector.inl>\r
108 \r
109 // Let's define the two only valid types of Selector\r
110 typedef Selector<SocketUDP> SelectorUDP;\r
111 typedef Selector<SocketTCP> SelectorTCP;\r
112 \r
113 } // namespace sf\r
114 \r
115 \r
116 #endif // SFML_SELECTOR_HPP\r