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
parent e14616030c
commit 891cfb41fb
No known key found for this signature in database
GPG Key ID: B494D3DF92661B99
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
}