#java #сокет
Проект В общем вот ссылка на проект, реализована игра быки-коровы: сервер генерирует "слово" из 4 цифр, а клиент пытается его отгадать. Налажено подключение и отключение. Но не могу реализовать тайм аут, если пользователь или сервер долгое время не получали сообщений. Максимум что удавалось, это в контроллере Клиента вызывать в методе нажатия кнопки после считывая данных функцию setOutTimeout, или которая бы сверяла System.currentMills заданную перед проверкой и после, все в целом отрабатывает и закрывает сокет, но появляется ошибка в Моделе: Stream closed.
Ответы
Ответ 1
В общем, реализовал как смог, с помощью костылей. class TimeoutThread extends Thread { private final int time; private boolean isStop = false; public TimeoutThread(int time) { super(); this.time = time; } public void stopCheckTimeout() { this.isStop = true; } @Override public void run() { try { System.out.println("start"); long endTime = System.currentTimeMillis() + time; count = time / 1000; while (!isStop) { count--; Thread.sleep(1000); System.out.println("ooo"); ClientPresenter.getInstance().handleResult(String.valueOf(count)); if (System.currentTimeMillis() > endTime) { System.out.println("disc"); disconnect(); break; } } System.out.println("finish"); } catch (Exception e) { e.printStackTrace(); } } И использовал: new Thread(() -> { TimeoutThread timeoutThread = new TimeoutThread(10000); while (status) { try { if (isReceive()) { timeoutThread.stopCheckTimeout(); //stop current timeout boolean gameFinished = check(); if(gameFinished) { return; } timeoutThread = new TimeoutThread(10000); // start new timeoutThread.start(); } } catch (Exception e) { status = false; } } }).start();
Комментариев нет:
Отправить комментарий