Implement socket shutdown/closing
This commit is contained in:
parent
134fd77247
commit
cc03c321f3
|
@ -39,9 +39,9 @@ namespace Feather
|
||||||
clients.emplace_back(std::move(client));
|
clients.emplace_back(std::move(client));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DedicatedServer::OnClientDisconnect(const Network::TCPClientHandle& client)
|
void DedicatedServer::OnClientDisconnect(const Network::TCPClient* client)
|
||||||
{
|
{
|
||||||
auto [clients, lock] = m_clients.borrow();
|
auto [clients, lock] = m_clients.borrow();
|
||||||
clients.remove_if([&](MinecraftClient& other) { return other.GetTCPClient() == client; });
|
clients.remove_if([&](MinecraftClient& other) { return other.GetTCPClient().get() == client; });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace Feather
|
||||||
~DedicatedServer();
|
~DedicatedServer();
|
||||||
|
|
||||||
void OnClientConnect(Network::TCPClientHandle&& client) override;
|
void OnClientConnect(Network::TCPClientHandle&& client) override;
|
||||||
void OnClientDisconnect(const Network::TCPClientHandle& client) override;
|
void OnClientDisconnect(const Network::TCPClient* client) override;
|
||||||
|
|
||||||
ServerStatus& GetStatus() { return m_status; }
|
ServerStatus& GetStatus() { return m_status; }
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,6 @@ namespace Feather::Network
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void OnClientConnect(TCPClientHandle&& client) = 0;
|
virtual void OnClientConnect(TCPClientHandle&& client) = 0;
|
||||||
virtual void OnClientDisconnect(const TCPClientHandle& client) = 0;
|
virtual void OnClientDisconnect(const TCPClient* client) = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "NetworkManager.h"
|
#include "NetworkManager.h"
|
||||||
#include "NetworkMessage.h"
|
#include "NetworkMessage.h"
|
||||||
#include "PacketReader.h"
|
#include "PacketReader.h"
|
||||||
|
#include "logging/Logger.h"
|
||||||
|
|
||||||
#include <event2/event.h>
|
#include <event2/event.h>
|
||||||
#include <event2/listener.h>
|
#include <event2/listener.h>
|
||||||
|
@ -151,6 +152,14 @@ namespace Feather::Network
|
||||||
|
|
||||||
void TCPClient::EventCallback(int16_t event)
|
void TCPClient::EventCallback(int16_t event)
|
||||||
{
|
{
|
||||||
|
if (event & BEV_EVENT_ERROR)
|
||||||
|
{
|
||||||
|
const char* errorString = evutil_socket_error_to_string(EVUTIL_SOCKET_ERROR());
|
||||||
|
Log_Error("TCPClient: %s", errorString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event & BEV_EVENT_EOF)
|
||||||
|
m_parent->OnClientDisconnected(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCPClient::Write(const uint8_t* data, size_t size)
|
void TCPClient::Write(const uint8_t* data, size_t size)
|
||||||
|
@ -200,4 +209,9 @@ namespace Feather::Network
|
||||||
TCPListener::~TCPListener()
|
TCPListener::~TCPListener()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TCPListener::OnClientDisconnected(const TCPClient* client)
|
||||||
|
{
|
||||||
|
m_callbacks->OnClientDisconnect(client);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,12 @@ namespace Feather::Network
|
||||||
public:
|
public:
|
||||||
TCPListener(uint16_t port, IListenerInterface* callbacks);
|
TCPListener(uint16_t port, IListenerInterface* callbacks);
|
||||||
~TCPListener();
|
~TCPListener();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
friend class TCPClient;
|
||||||
|
void OnClientDisconnected(const TCPClient* client);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IListenerInterface* m_callbacks;
|
IListenerInterface* m_callbacks;
|
||||||
std::unique_ptr<TCPSocket> m_socket;
|
std::unique_ptr<TCPSocket> m_socket;
|
||||||
|
|
Loading…
Reference in New Issue