-
Notifications
You must be signed in to change notification settings - Fork 1
Взаимодействие TransportKP и UserKP
Kirill Ivashov edited this page Dec 24, 2015
·
15 revisions
Публикуется клиентом один раз. Содержит свойства
- hasRoute - Route
- tspType - string. Тип маршрута open/closed.
- hasPoint. Содержит точки (Point) для построение по ним маршрута (кроме начальной точки, она совпадает с положением пользователя (???))
- hasMovement. Результат работы TransportKP — перемещения между точками
- hasStartMovement. Первый Movement
- processed - свойство обновляется TransportKP при обновлении маршрута.
- updated - свойство обновляемое UserKP для уведомления о том, что содержимое запроса (hasPoints) изменилось.
- provides - Schedule. Пока каждый UserKP может создать только один Schedule (нужно ли больше?)
- hasLocation - Location. Местоположение пользователя.
- Ищет в smartspace'е User'а со своим id, если не найдено — создает
- Ищет в smartspace'е свой Schedule'е, если найдено, подписывается (см. далее), если не найдено — ничего не создает.
- При получении новых координат публикует новый объект Location
- Обновляет свойство hasLocation у своего объекта User
- Старый Location не удаляет, т.к. на него может ссылаться SearchRequest
- Если запрос (Schedule->Route) уже существует в smartspace'е, то удаляются все свойства hasPoint
- Если запроса не существует, то он публикуется и подписывается
- Добавляется свойства Route::hasPoint
- Добавляется или изменятеся свойство Route::tspType
- Обновляется свойство Route::updated (присваивается уникальное значение — случайное или текущее время).
Подписывается на свойство processed объекта Route.
Отписывается от свойства processed объекта Route. Удаляет из SIB'а созданные ранее объекты Schedule, Route и User.
Подписывается на изменение свойства updated у класса Route. Подписывается на изменение Location'а у класса User'а. Обе подписки только на свойства, а не на конкретные объекты.
- Получает объект Route, у которого изменилось updated.
- Получает Schedule, которому соответствует измененный Route (через template-запрос).
- Получает User, которому соответствует полученный на п. 2 Route (через template-запрос).
- goto "Дальнейшие действия при получении обновлений"
- Получает User'а, у которого обновился Location через template-запрос
- Получает Schedule и Route для User'а через запрос свойства.
- goto "Дальнейшие действия при получении обновлений"
- Получает Point'ы, Location'ы, tspType'ы и т.п. из вышеперечисленных классов
- Передает все что выше в Java-код.
- Ищет/добавляет в кэш-е полученного User'а и его текущее состояние.
- Передает все данные из smartspace'е в процедуру обновления состояния (состояние может быть пустым, процедура обновления должна обновить при необходимости или создать маршрут). Процедура обновления делает следующее
- Если маршрута еще не построено, то построить, используя tspType, точки и Location.
- Если изменился только Location, смотреть насколько он изменился и если сильно - обновить маршрут
- Если изменился tspType или точки, то перестроить маршрут полностью (или придумать как в алгоритме SimulatedAnnealing'а можно оптимально обновить маршрут при изменении этих данных).
- После перестроения маршрута опубликовать его в SmartSpace'е, обновив в конце свойство processed.
- Отписывается от всех подписок
- Допустимо ли использовать искусственные поля processed и updated для уведомления других KP об изменении данных?
-
- это решает проблему атомарности обновления (т.к. smartslog не может обновлять много индивидов в одну транзакцию).
-
- KP может подписаться на одно свойство, а не отдельно на точки, tspType и т.п.
-
- искуственное поле, возможно нарушает идеологию smartspace'ов
-
- Допустимо ли подписываться на обновление свойства без указания индивида (т.е. подписка на triple
<any-subject> <updated> <any-object>
)?