public void ConnectAndDisposeOneClientShouldBeTrackedByServer()
        {
            var started = _server.Start();

            Assert.True(started, "Could not start server");
            Assert.Empty(_server.Clients);

            var reportConnected = false;

            _server.ClientConnected += _ => { reportConnected = true; };
            var reportDisconnected = false;

            _server.ClientDisconnected += _ => { reportDisconnected = true; };

            _client = new SocketCommandClient("localhost", _testServerPort, _ => { });
            var connected = _client.Connect();

            Assert.True(connected, "LastResult: " + _client.LastResult);
            Thread.Sleep(100);

            Assert.True(reportConnected);
            Assert.Single(_server.Clients);

            _client.Dispose();
            Thread.Sleep(100);

            Assert.True(reportDisconnected);
            Assert.Empty(_server.Clients);
        }
        public void Dispose()
        {
            _cancel?.Cancel();
            if (_task != null)
            {
                if (_task.Wait(1000))
                {
                    _task?.Dispose();
                }
                _task = null;
            }

            _client?.Dispose();
            _client = null;

            _server.Terminate();
        }