public async Task DisconnectClientAsync(bool dispose = false) { Config.DisconnectClient(); if (Config.ClientConnection.Connected) { Config.ClientConnection.Disconnect(true); } while (Config.ClientConnection.Connected) { Logger.Log("Waiting for client to disconnect..."); await Task.Delay(5).ConfigureAwait(false); } Logger.Log($"Disconnected client => {Config.IpAddress}"); OnDisconnected?.Invoke(this, new OnDisconnectedEventArgs(Config.IpAddress, Config.Uid, 5000)); if (dispose) { Config.ClientConnection?.Close(); Config.ClientConnection?.Dispose(); JobManager.AddJob(() => { TCPServerCore.RemoveClient(this); }, TimeSpan.FromSeconds(5)); } }