Add WebSocket::cork
This commit is contained in:
@@ -223,7 +223,7 @@ public:
|
|||||||
(us_socket_context_t *) webSocketContext, (us_socket_t *) res, sizeof(WebSocketData) + sizeof(UserData));
|
(us_socket_context_t *) webSocketContext, (us_socket_t *) res, sizeof(WebSocketData) + sizeof(UserData));
|
||||||
|
|
||||||
/* Update corked socket in case we got a new one (assuming we always are corked in handlers). */
|
/* Update corked socket in case we got a new one (assuming we always are corked in handlers). */
|
||||||
webSocket->cork();
|
webSocket->AsyncSocket<SSL>::cork();
|
||||||
|
|
||||||
/* Initialize websocket with any moved backpressure intact */
|
/* Initialize websocket with any moved backpressure intact */
|
||||||
httpContext->upgradeToWebSocket(
|
httpContext->upgradeToWebSocket(
|
||||||
|
|||||||
@@ -139,6 +139,21 @@ public:
|
|||||||
webSocketData->subscriber = nullptr;
|
webSocketData->subscriber = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Corks the response if possible. Leaves already corked socket be. */
|
||||||
|
void cork(fu2::unique_function<void()> &&handler) {
|
||||||
|
if (!Super::isCorked() && Super::canCork()) {
|
||||||
|
Super::cork();
|
||||||
|
handler();
|
||||||
|
|
||||||
|
/* There is no timeout when failing to uncork for WebSockets,
|
||||||
|
* as that is handled by idleTimeout */
|
||||||
|
auto [written, failed] = Super::uncork();
|
||||||
|
} else {
|
||||||
|
/* We are already corked, or can't cork so let's just call the handler */
|
||||||
|
handler();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Subscribe to a topic according to MQTT rules and syntax */
|
/* Subscribe to a topic according to MQTT rules and syntax */
|
||||||
void subscribe(std::string_view topic) {
|
void subscribe(std::string_view topic) {
|
||||||
WebSocketContextData<SSL> *webSocketContextData = (WebSocketContextData<SSL> *) us_socket_context_ext(SSL,
|
WebSocketContextData<SSL> *webSocketContextData = (WebSocketContextData<SSL> *) us_socket_context_ext(SSL,
|
||||||
|
|||||||
Reference in New Issue
Block a user