WebSocketService.h
1/* Copyright (C) 2015 by Laurentiu-Gheorghe Crisan
2 Copyright (C) 2026 by Marc Boris Duerner
3 SPDX-License-Identifier: LGPL-2.1-or-later WITH mif-exception
4*/
5
6#ifndef PT_HTTP_WEBSOCKETSERVICE_H
7#define PT_HTTP_WEBSOCKETSERVICE_H
8
9#include <Pt/Http/Api.h>
10#include <Pt/Http/Service.h>
11#include <Pt/Http/WebSocketSession.h>
12#include <Pt/Allocator.h>
13#include <Pt/Connectable.h>
14#include <cstddef>
15
16namespace Pt {
17
18namespace System {
19class EventLoop;
20}
21
22namespace Http {
23
24class Request;
25class Responder;
26class Stream;
28
105class PT_HTTP_API WebSocketService : public Service
106 , public Connectable
107{
108 friend class WebSocketResponder;
109
110 public:
114
121
126 std::size_t maxSockets() const;
127
133 void setMaxSockets(std::size_t n);
134
137 std::size_t idleTimeout() const;
138
145 void setIdleTimeout(std::size_t ms);
146
149 std::size_t maxMessageSize() const;
150
157 void setMaxMessageSize(std::size_t n);
158
159 protected:
163
166 virtual void onReleaseResponder(Responder* responder);
167
173 virtual WebSocketSession* onGetSession(WebSocketServlet& servlet,
174 System::EventLoop& loop,
175 Stream& stream) = 0;
176
182 virtual void onReleaseSession(WebSocketSession* session) = 0;
183
189 virtual void onUpgrade(Stream& stream) final;
190
191 private:
192 friend class WebSocketServlet;
193
196 std::size_t sessionCount() const;
197
198 void registerServlet(WebSocketServlet& servlet);
199
200 void unregisterServlet(WebSocketServlet& servlet);
201
202 WebSocketServlet* _servlet;
203 std::size_t _maxSockets;
204 std::size_t _idleTimeout;
205 std::size_t _maxMessageSize;
206};
207
212template <typename S, typename Alloc = Allocator>
214{
215 public:
220
225
226 protected:
227 virtual WebSocketSession* onGetSession(WebSocketServlet& servlet,
228 System::EventLoop& loop,
229 Stream& stream)
230 {
231 void* memory = _alloc.allocate(sizeof(S));
232 return new(memory) S(servlet, loop, stream);
233 }
234
235 virtual void onReleaseSession(WebSocketSession* session)
236 {
237 session->~WebSocketSession();
238 _alloc.deallocate(session, sizeof(S));
239 }
240
241 private:
242 Alloc _alloc;
243};
244
245} // namespace Http
246
247} // namespace Pt
248
249#endif
Connectable()
Default constructor.
virtual WebSocketSession * onGetSession(WebSocketServlet &servlet, System::EventLoop &loop, Stream &stream)
Creates the session for stream.
Definition WebSocketService.h:227
virtual void onReleaseSession(WebSocketSession *session)
Destroys a session created by onGetSession().
Definition WebSocketService.h:235
BasicWebSocketService()
Default constructor.
Definition WebSocketService.h:218
~BasicWebSocketService()
Destructor.
Definition WebSocketService.h:223
HTTP request message.
Definition Request.h:65
Handles one HTTP request and writes the reply.
Definition Responder.h:109
Service()
Default Constructor.
One HTTP stream on a connection.
Definition Stream.h:90
std::size_t idleTimeout() const
Returns the idle timeout in milliseconds.
virtual void onReleaseResponder(Responder *responder)
Destroys the handshake responder.
virtual Responder * onGetResponder(const Request &)
Creates the handshake responder.
void setMaxSockets(std::size_t n)
Sets the maximum number of live sessions.
virtual void onReleaseSession(WebSocketSession *session)=0
Destroys a session created by onGetSession().
void setMaxMessageSize(std::size_t n)
Sets the maximum data message size in bytes.
WebSocketService()
Default constructor.
void setIdleTimeout(std::size_t ms)
Sets the idle timeout in milliseconds.
virtual void onUpgrade(Stream &stream) final
Accepts or declines the upgraded stream.
std::size_t maxMessageSize() const
Returns the maximum data message size in bytes.
~WebSocketService()
Destructor.
std::size_t maxSockets() const
Returns the maximum number of live sessions.
virtual WebSocketSession * onGetSession(WebSocketServlet &servlet, System::EventLoop &loop, Stream &stream)=0
Creates the session for stream.
Release scope of the sessions one WebSocket service creates.
Definition WebSocketServlet.h:66
Server facade of one accepted WebSocket stream.
Definition WebSocketSession.h:126
~WebSocketSession()
Closes the stream.
Event loop of a thread or process.
Definition EventLoop.h:83
HTTP clients and servers.
System programming
Definition Connection.h:26
Core module.
Definition Allocator.h:33