Одновременные запросы с андроидов на сервер

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем Grisha, 6 июн 2014.

  1. Grisha

    Grisha ♙ ▁ ▂ ▃ ▅ ▆ █ ♚

    Регистр.:
    30 сен 2012
    Сообщения:
    154
    Симпатии:
    160
    Есть несколько планшетов с андроидом и сервер на винде. С сервера передаются вопросы с вариантами ответов, а с планшетов на сервер передаётся номер ответа.
    При одновременном нажатии кнопок на планшетах сервер получает номера одной строкой, что является ошибкой. При неодновременном нажатии (то есть только на одном планшете в одно время) такой проблемы нет.
    Попробовал с сервера по очереди с задержкой давать планшетам разрешение на передачу, но возникла проблема.

    Нажатие кнопки на планшете:

    ...
    Log.d(LOG_TAG, "ALLOWED setOK " + ALLOWED);

    do
    {
    WrBool = proverka(); Здесь виснем, если ALLOWED == false
    }
    while (!WrBool);

    Log.d(LOG_TAG, "ALLOWED OK " + WrBool);
    ...

    В функции proverka() читаем ALLOWED

    Получение разрешения с сервера:
    ...
    case '6': // опрос
    ALLOWED = true;
    Log.d(LOG_TAG, "ALLOWED 6 " + ALLOWED);
    set_timer3(); // устанавливает ALLOWED в false с задержкой
    break;

    По идее в цикле do-while мы должны дождаться разрешения с сервера (ALLOWED = true), но если нажали кнопку при
    ALLOWED == false, цикл глухо виснет.

    Что можно сделать?
     
    Последнее редактирование: 6 июн 2014
  2. xotox

    xotox Постоялец

    Регистр.:
    10 янв 2013
    Сообщения:
    51
    Симпатии:
    3
    для планшетов нужно сделать реализацию генерации уникальных ID, чтоб сервер видел, что приходят ответы от разных устройств
     
  3. Grisha

    Grisha ♙ ▁ ▂ ▃ ▅ ▆ █ ♚

    Регистр.:
    30 сен 2012
    Сообщения:
    154
    Симпатии:
    160
    прошу поподробнее. Как этот параметр называется и где может находиться?
     
  4. Darkness

    Darkness Постоялец

    Регистр.:
    21 янв 2013
    Сообщения:
    146
    Симпатии:
    69
    WrBool остается false и цикл не кончается, проблема может быть в set_timer3.
     
  5. aurora2000

    aurora2000 Создатель

    Регистр.:
    24 авг 2014
    Сообщения:
    30
    Симпатии:
    3
    Используйте уникальный идентификатор и разделяйте ваши планшеты

    import android.provider.Settings.Secure;

    privateString android_id =Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);

    передавайте его одним из параметров, тогда вы сможете четко видеть на каком планшете/устройстве произошло нужное вам событие