Lifecycle management for sockets.
This commit is contained in:
@@ -552,7 +552,6 @@ public:
|
||||
{
|
||||
FinalCleanup();
|
||||
}
|
||||
Lv2Log::error("PiPedalSocketHandler deleted");
|
||||
|
||||
}
|
||||
|
||||
|
||||
+9
-2
@@ -754,7 +754,11 @@ namespace pipedal
|
||||
public:
|
||||
~WebSocketSession()
|
||||
{
|
||||
this->socketHandler = nullptr;
|
||||
if (this->socketHandler)
|
||||
{
|
||||
this->socketHandler->onSocketClosed();
|
||||
this->socketHandler = nullptr;
|
||||
}
|
||||
webSocket = nullptr;
|
||||
pServer = nullptr;
|
||||
Lv2Log::info(SS("WebSocketSession closed. " << fromAddress));
|
||||
@@ -819,7 +823,10 @@ namespace pipedal
|
||||
std::lock_guard<std::recursive_mutex> lock{m_sessionsMutex};
|
||||
m_sessions.erase(session);
|
||||
m_connections.erase(hConnection);
|
||||
session = nullptr; // probably delete here.
|
||||
if (session != nullptr)
|
||||
{
|
||||
session = nullptr; // probably delete here.
|
||||
}
|
||||
}
|
||||
|
||||
void NotFound(server::connection_type &connection, const std::string &filename)
|
||||
|
||||
+11
-3
@@ -81,7 +81,6 @@ class WebServerImpl;
|
||||
class SocketHandler {
|
||||
friend class WebServerImpl;
|
||||
public:
|
||||
|
||||
class IWriteCallback {
|
||||
public:
|
||||
virtual void close() = 0;
|
||||
@@ -100,6 +99,7 @@ public:
|
||||
}
|
||||
|
||||
public:
|
||||
virtual void onSocketClosed() = 0;
|
||||
virtual void onReceive(const std::string_view&text) = 0;
|
||||
public:
|
||||
std::string getFromAddress() const { return writeCallback_->getFromAddress(); }
|
||||
@@ -112,12 +112,20 @@ public:
|
||||
writeCallback_->writeCallback(text);
|
||||
}
|
||||
}
|
||||
virtual void OnSocketClosed()
|
||||
{
|
||||
writeCallback_ = nullptr;
|
||||
}
|
||||
virtual void Close()
|
||||
{
|
||||
writeCallback_->close();
|
||||
if (writeCallback_ != nullptr)
|
||||
{
|
||||
writeCallback_->close();
|
||||
writeCallback_ = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
virtual ~SocketHandler() = default;
|
||||
virtual ~SocketHandler() {}
|
||||
|
||||
virtual void onAttach() { }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user