public async Task StartServer(int maxClients = 100)
        {
            ServerCancellationTokenSource = new CancellationTokenSource();
            Listener.Start(ServerPort);
            var taskStarted = false;

            var task = Task.Run(async() =>
            {
                var numberOfAttachedClients = 0;
                ServerCancellationTokenSource.Token.ThrowIfCancellationRequested();
                taskStarted = true;
                while (true)
                {
                    if (numberOfAttachedClients < maxClients)
                    {
                        var client = await Listener.AcceptNetworkClientAsync(ServerName);
                        if (client != null)
                        {
                            numberOfAttachedClients++;
                            OnClientConnected?.Invoke(this, client.ClientName);
                            await StartSession(client);
                        }
                    }
                    await Task.Delay(1);
                }
            }, ServerCancellationTokenSource.Token);

            while (!taskStarted)
            {
                await Task.Delay(1);
            }
        }