Моя программа представляет собой игру «Угадай число» на сервере с использованием C # .net, JavaScript и SignalR. Игра объединяет пользователей и ждет, когда никто не будет готов. Игра отображает «первый игрок» и «второй игрок», когда нажаты обе кнопки регистрации.

Функция «Регистрация» работает путем добавления клиентов в список, и когда есть два доступных клиента, они играют вместе. После того, как текущий клиент добавляет себя в список, происходит проверка всех других доступных игроков. Когда это происходит, оба клиента удаляются из списка, а кнопка для регистрации скрыта, чтобы предотвратить дальнейшую регистрацию, поскольку они уже есть.

Проблема заключается в том, что Printnames2 () выполняется так, как если бы два клиента были отключены, когда два клиента были подключены. Чтобы объяснить более подробно, если страница зарегистрирована и не сопряжена и становится отключенной, то на следующей открытой странице будет отображаться текст «игрок два», когда есть только один игрок !!! Я ПОПРОБОВАЛ ВСЕ !!!!!

Вещи, которые я пробовал, состоят в том, чтобы упростить для вас простой код, удалить операторы foreach и изменить все, чтобы увидеть, является ли это причиной того, что программа не работает.

Я предоставил ссылку на два быстрых фильма, которые показывают, что происходит более подробно, и фрагмент кода ниже. Спасибо!

Два быстрых фильма

GitHub тоже

   public async Task Register() 
    {
    Clients A_Client = new Clients();
    A_Client.ConnectionId = Context.ConnectionId;
    //A_Client.Name = "a";
    ClientList.Add(A_Client);
    //hides button
    await Clients.Client(Context.ConnectionId).SendAsync("IsRegister");
    var flag1 = 0;
    //foreach (Clients element in ClientList)
    for (int i = ClientList.Count - 1; i {amp}gt;= 0; --i)
    {
        //PlayerOneConnId = "";
        //PlayerTwoConnId = "";

        //not the current user - open page, gets removed after used
        if ((ClientList[i].ConnectionId) != (Context.ConnectionId))
        {
            PlayerTwoConnId = ClientList[i].ConnectionId;
            PlayerOneConnId = Context.ConnectionId;

            //remove other player
            ClientList.RemoveAt(i);
            //remove current player flag
            flag1 = 1;
            break;
        }
    }
    //there was another player so remove other
    if (flag1 == 1)
    {
        flag1 = 0;

        for (int j = ClientList.Count - 1; j {amp}gt;= 0; --j)
        {

            if ((ClientList[j].ConnectionId) ==( Context.ConnectionId))
            {
                //removes current player
                ClientList.RemoveAt(j);
                //prints names

                //player 2
                await Clients.Client(PlayerOneConnId).SendAsync("Printnames2");
                //player 1
                await Clients.Client(PlayerTwoConnId).SendAsync("Printnames1");
                break;
            }

        }
    }
}