09.11.2012 16:49
 0просмотров 18 0

Поправка на качество соединения.

Обратим внимание на то, что связь - дело не надёжное. Особенно через интернет. И сервер ГВД не всегда может ответить. И если сервер не отвечает - хорошо бы попытку повторить.
Сделаем для этого некоторые изменения. Убираем из метода GetPage
блок try-catch. Добавляев в его описание выброс исключений:

private void GetPage(String Address) throws MalformedURLException, URISyntaxException, IOException

В методе ScanDiapason добавим обработку исключений. Теперь он будет выглядеть так:

private void ScanDiapason(int start_value, int stop_value) {
   for (int i = start_value; i <= stop_value; i++) {
      try {
         GetPage("http://my.lordswm.com/pl_info.php?id=" + i, i);
      } catch (Exception ex) {
         i--;
         try {
            Thread.currentThread().sleep(500);
         } catch (InterruptedException ex1) {
            System.out.println(ex1.getMessage());
         }
                
      }
   }
}


Что тут происходит. Если метод GetPage бросает исключение, то мы уменьшаем счётчик i, чтобы при следующей итерации снова пробовать обрабатывать того-же персонажа, и ждём 500 миллисикунд перед следующей попыткой. Thread.currentThread().sleep(500) - это команда ожидать текущему потоку. Этод метод сам может бросить исключение - InterruptedException. Это прерывание ожидания, вызванное внешним прерыванием. Не будем углубляться в эту тему.

Теперь, если сервер по каким-либо причинам недоступен, бот раз в полсекунды будет повторять попытку, а не пойдёт перебирать персонажей дальше.

Сразу отметим, что MalformedURLException, URISyntaxException - это исключения формата адреса. Обрабатывая их таким-же образом, как и IOException, мы берём на себя ответственность за то, что адрес всегда будет верный. Если в адресе всё-таки появится ошибка, поток, в котором это произойдёт, зациклится на нём.

Возможность комментировать доступна после регистрации