LibWebSocket+RequestServer: Add a WebSocketImpl using libcurl

This implementation can be better improved in the future by ripping
out a lot of the manual logic in LibWebSocket and rely on libcurl to
parse our message payloads. But for now, this uses the 'raw mode' of
curl websockets in connect-only mode to allow for somewhat seamless
integration into our event loop.
This commit is contained in:
Andrew Kaster 2025-02-20 04:18:37 -07:00 committed by Andrew Kaster
commit 71942d53eb
Notes: github-actions[bot] 2025-02-20 22:06:12 +00:00
7 changed files with 248 additions and 4 deletions

View file

@ -42,9 +42,14 @@ void WebSocket::start()
m_impl->on_connected = [this] {
if (m_state != WebSocket::InternalState::EstablishingProtocolConnection)
return;
set_state(WebSocket::InternalState::SendingClientHandshake);
send_client_handshake();
drain_read();
if (m_impl->handshake_complete_when_connected()) {
set_state(WebSocket::InternalState::Open);
notify_open();
} else {
set_state(WebSocket::InternalState::SendingClientHandshake);
send_client_handshake();
drain_read();
}
};
m_impl->on_ready_to_read = [this] {
drain_read();