Gamedev Framework (gf) 1.2.0
A C++17 framework for 2D games
SocketSelector.h
1/*
2 * Gamedev Framework (gf)
3 * Copyright (C) 2016-2022 Julien Bernard
4 *
5 * This software is provided 'as-is', without any express or implied
6 * warranty. In no event will the authors be held liable for any damages
7 * arising from the use of this software.
8 *
9 * Permission is granted to anyone to use this software for any purpose,
10 * including commercial applications, and to alter it and redistribute it
11 * freely, subject to the following restrictions:
12 *
13 * 1. The origin of this software must not be misrepresented; you must not
14 * claim that you wrote the original software. If you use this software
15 * in a product, an acknowledgment in the product documentation would be
16 * appreciated but is not required.
17 * 2. Altered source versions must be plainly marked as such, and must not be
18 * misrepresented as being the original software.
19 * 3. This notice may not be removed or altered from any source distribution.
20 */
21#ifndef GF_SOCKET_SELECTOR_H
22#define GF_SOCKET_SELECTOR_H
23
24#include <vector>
25
26#ifdef _WIN32
27#include <winsock2.h>
28#else
29#include <poll.h>
30#endif
31
32#include "NetApi.h"
33#include "Socket.h"
34#include "SocketGuard.h"
35#include "SocketTypes.h"
36#include "Time.h"
37
38namespace gf {
39#ifndef DOXYGEN_SHOULD_SKIP_THIS
40inline namespace v1 {
41#endif
42
50 class GF_NET_API SocketSelector : private SocketGuard {
51 public:
56
60 void addSocket(Socket& socket);
61
65 void removeSocket(Socket& socket);
66
70 void clear();
71
82 SocketSelectorStatus wait(Time duration = seconds(-1));
83
87 bool isReady(Socket& socket);
88
89 private:
90 std::vector<pollfd>::iterator find(Socket& socket);
91
92 private:
93 std::vector<pollfd> m_fds;
94 bool m_sorted;
95 };
96
97#ifndef DOXYGEN_SHOULD_SKIP_THIS
98}
99#endif
100}
101
102#endif // GF_SOCKET_SELECTOR_H
A guard to handle library initialization.
Definition: SocketGuard.h:42
A network socket.
Definition: Socket.h:41
A socket selector.
Definition: SocketSelector.h:50
void removeSocket(Socket &socket)
Remove a socket from the selector.
SocketSelectorStatus wait(Time duration=seconds(-1))
Wait for an event of the set of sockets.
SocketSelector()
Constructor.
void addSocket(Socket &socket)
Add a socket to the selector.
bool isReady(Socket &socket)
Tell if the provided socket is ready.
void clear()
Clear all the sockets in the selector.
Represents a time value.
Definition: Time.h:65
SocketSelectorStatus
The status of the selector.
Definition: SocketTypes.h:98
The namespace for gf classes.