sptk2 logo
SPTK Home Page
SocketEvents.h
1/*
2╔══════════════════════════════════════════════════════════════════════════════╗
3║ SIMPLY POWERFUL TOOLKIT (SPTK) ║
4╟──────────────────────────────────────────────────────────────────────────────╢
5║ copyright © 1999-2022 Alexey Parshin. All rights reserved. ║
6║ email alexeyp@gmail.com ║
7╚══════════════════════════════════════════════════════════════════════════════╝
8┌──────────────────────────────────────────────────────────────────────────────┐
9│ This library is free software; you can redistribute it and/or modify it │
10│ under the terms of the GNU Library General Public License as published by │
11│ the Free Software Foundation; either version 2 of the License, or (at your │
12│ option) any later version. │
13│ │
14│ This library is distributed in the hope that it will be useful, but │
15│ WITHOUT ANY WARRANTY; without even the implied warranty of │
16│ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library │
17│ General Public License for more details. │
18│ │
19│ You should have received a copy of the GNU Library General Public License │
20│ along with this library; if not, write to the Free Software Foundation, │
21│ Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. │
22│ │
23│ Please report all bugs and problems to alexeyp@gmail.com. │
24└──────────────────────────────────────────────────────────────────────────────┘
25*/
26
27#pragma once
28
29#include "sptk5/SystemException.h"
30#include <map>
31#include <mutex>
32#include <sptk5/Exception.h>
33#include <sptk5/net/BaseSocket.h>
34#include <sptk5/net/SocketPool.h>
35#include <sptk5/threads/Flag.h>
36#include <sptk5/threads/Thread.h>
37
38namespace sptk {
39
47class SP_EXPORT SocketEvents
48 : public Thread
49{
50public:
57 SocketEvents(const String& name, const SocketEventCallback& eventsCallback,
58 std::chrono::milliseconds timeout = std::chrono::milliseconds(
59 100));
60
64 ~SocketEvents() override;
65
71 void add(BaseSocket& socket, uint8_t* userData);
72
77 void remove(BaseSocket& socket);
78
82 void stop();
83
87 void terminate() override;
88
93 size_t size() const;
94
95protected:
99 void threadFunction() override;
100
101private:
102 mutable std::mutex m_mutex;
103 SocketPool m_socketPool;
104 std::map<int, void*> m_watchList;
105 std::chrono::milliseconds m_timeout;
106
107 Flag m_started;
108 bool m_shutdown {false};
109};
110
111using SharedSocketEvents = std::shared_ptr<SocketEvents>;
112
113} // namespace sptk
Definition: BaseSocket.h:87
Definition: Flag.h:46
Definition: SocketEvents.h:49
void remove(BaseSocket &socket)
SocketEvents(const String &name, const SocketEventCallback &eventsCallback, std::chrono::milliseconds timeout=std::chrono::milliseconds(100))
void add(BaseSocket &socket, uint8_t *userData)
size_t size() const
void terminate() override
void threadFunction() override
~SocketEvents() override
Definition: SocketPool.h:94
Definition: String.h:49
Definition: Thread.h:51

Fri Oct 14 2022 09:58:32: SPTK 5.4.1