Я предлагаю изменения в вашем алгоритме выше, как показано в шагах ниже.
JMS Вызов другого процесса
1a. Начните с отправки текущей позиции.
1b. Другой процесс ответит сообщением JMS, содержащим список всех «позиций ямок» в видимой области позиции вашего транспортного средства. Сохраните этот список «видимых положений ямок» на стороне клиента для использования в шагах ниже.
1c. Мы определяем видимую область как соседнюю область vehical, так что даже при (1-секундная задержка + сетевая задержка) вызова другого процесса с JMS движение vehical не должно пересекать эту область.
1d. Через каждую секунду повторяйте шаги 1a и 1b и заменяйте список позиций отверстий на стороне клиента относительно текущей позиции вашего транспортного средства.
.
Наблюдатель за подвижным движением
2a. Внедрите шаблон Observer, который может получать уведомления о движениях.
2b. Каждый раз, когда генерируется событие, наблюдатель проверяет, совпадает ли позиция vehical с одной из записей в списке видимых отверстий в горшке, полученных на шаге 1b.
2в. Если совпадение найдено, бинго! Вы должны остановить транспортное средство.
.
Автомобильное движение
3a. Зарегистрируйте наблюдателя step-2a для наблюдения за движениями автомобиля
3b. Подождите, пока вы не получите хотя бы первый список видимых отверстий в горшке с шага 1b.
3c. Начните движение vehical, увеличивая значение X каждые 100 мс. Каждый раз, когда он движется, он должен уведомить наблюдателя шага 2а.
.
Обозначения на диаграмме ниже:
o - Instance of each pot hole somewhere on map
X - Moving vehical
. - Path followed by vehical
Circle - Visible area of the vehical driver
+---------------------------------------------+
| |
| o o |
| o |
| |
| |
| _.-''''`-._ |
| o ,' `. o |
| ,' o `. |
| .' . `. |
| | . . | |
| | . | o |
| | X | |
| o \ o / |
| \ / |
| `. ,' |
| `-._ _.-' |
| `'''' |
| |
| o |
| o |
| |
| |
| o o |
+---------------------------------------------+