Skip to content

Commit 5307838

Browse files
committed
[Server] Now handles client socket disconnection properly.
1 parent d883467 commit 5307838

File tree

2 files changed

+19
-9
lines changed

2 files changed

+19
-9
lines changed

server/source/network/Server.cpp

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ void Server::handleClientMessages() {
126126
ClientInfo &client = m_info.clients()[i];
127127
if (m_selector.isReady(*client.tcpSocket)) {
128128
sf::Packet packet;
129-
if (client.tcpSocket->receive(packet) == sf::Socket::Done) {
129+
sf::Socket::Status status = client.tcpSocket->receive(packet);
130+
if (status == sf::Socket::Done) {
130131
Network::Command command;
131132
packet >> command;
132133

@@ -138,23 +139,30 @@ void Server::handleClientMessages() {
138139
it.second(client, packet);
139140

140141
if (command == Network::Command::ClientDisconnect) {
141-
m_selector.remove(*client.tcpSocket);
142-
m_info.removeClient(client.id);
143-
144-
if (m_isSingleplayer && m_info.clients().size() == 0) {
145-
m_tcpListener.close();
146-
m_isRunning = false;
147-
}
148-
142+
disconnectClient(client);
149143
--i;
150144
}
151145
}
152146
}
153147
}
148+
else if (status == sf::Socket::Disconnected) {
149+
disconnectClient(client);
150+
--i;
151+
}
154152
}
155153
}
156154
}
157155

156+
void Server::disconnectClient(ClientInfo &client) {
157+
m_selector.remove(*client.tcpSocket);
158+
m_info.removeClient(client.id);
159+
160+
if (m_isSingleplayer && m_info.clients().size() == 0) {
161+
m_tcpListener.close();
162+
m_isRunning = false;
163+
}
164+
}
165+
158166
void Server::sendToAllClients(sf::Packet &packet) {
159167
for (ClientInfo &client : m_info.clients()) {
160168
client.tcpSocket->send(packet);

server/source/network/Server.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class Server {
6666
void handleNewConnections();
6767
void handleClientMessages();
6868

69+
void disconnectClient(ClientInfo &client);
70+
6971
bool m_isRunning = false;
7072
bool m_isSingleplayer = false;
7173

0 commit comments

Comments
 (0)