aboutsummaryrefslogtreecommitdiff
path: root/src/zenhttp/servers/wsasio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/zenhttp/servers/wsasio.cpp')
-rw-r--r--src/zenhttp/servers/wsasio.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/zenhttp/servers/wsasio.cpp b/src/zenhttp/servers/wsasio.cpp
index 3e31b58bc..b2543277a 100644
--- a/src/zenhttp/servers/wsasio.cpp
+++ b/src/zenhttp/servers/wsasio.cpp
@@ -4,6 +4,7 @@
#include "wsframecodec.h"
#include <zencore/logging.h>
+#include <zenhttp/httpserver.h>
namespace zen::asio_http {
@@ -16,15 +17,20 @@ WsLog()
//////////////////////////////////////////////////////////////////////////
-WsAsioConnection::WsAsioConnection(std::unique_ptr<asio::ip::tcp::socket> Socket, IWebSocketHandler& Handler)
+WsAsioConnection::WsAsioConnection(std::unique_ptr<asio::ip::tcp::socket> Socket, IWebSocketHandler& Handler, HttpServer* Server)
: m_Socket(std::move(Socket))
, m_Handler(Handler)
+, m_HttpServer(Server)
{
}
WsAsioConnection::~WsAsioConnection()
{
m_IsOpen.store(false);
+ if (m_HttpServer)
+ {
+ m_HttpServer->OnWebSocketConnectionClosed();
+ }
}
void
@@ -101,6 +107,11 @@ WsAsioConnection::ProcessReceivedData()
m_ReadBuffer.consume(Frame.BytesConsumed);
+ if (m_HttpServer)
+ {
+ m_HttpServer->OnWebSocketFrameReceived(Frame.BytesConsumed);
+ }
+
switch (Frame.Opcode)
{
case WebSocketOpcode::kText:
@@ -219,6 +230,11 @@ WsAsioConnection::DoClose(uint16_t Code, std::string_view Reason)
void
WsAsioConnection::EnqueueWrite(std::vector<uint8_t> Frame)
{
+ if (m_HttpServer)
+ {
+ m_HttpServer->OnWebSocketFrameSent(Frame.size());
+ }
+
bool ShouldFlush = false;
m_WriteLock.WithExclusiveLock([&] {