only broadcast the DisconnectPacket if the client was connected

Otherwise port scans, banned players or clients failing to initialize correctly,
will cause the server to send unnecessary packets to all connected clients.

They currently are informed about a disconnect for a client that hasn't even connected correctly.

(cherry picked from commit 4b04a3d5be)
This commit is contained in:
Robin C. Ladiges 2022-09-06 02:46:40 +02:00 committed by Sanae
parent e14616030c
commit 76fc4a80a6
1 changed files with 6 additions and 2 deletions

View File

@ -308,6 +308,8 @@ public class Server {
disconnect:
Logger.Info($"Client {socket.RemoteEndPoint} ({client.Name}/{client.Id}) disconnected from the server");
close:
bool wasConnected = client.Connected;
// Clients.Remove(client)
client.Connected = false;
try {
@ -316,8 +318,10 @@ public class Server {
catch { /*lol*/ }
#pragma warning disable CS4014
Task.Run(() => Broadcast(new DisconnectPacket(), client))
.ContinueWith(x => { if (x.Exception != null) { Logger.Error(x.Exception.ToString()); } });
if (wasConnected) {
Task.Run(() => Broadcast(new DisconnectPacket(), client))
.ContinueWith(x => { if (x.Exception != null) { Logger.Error(x.Exception.ToString()); } });
}
#pragma warning restore CS4014
}