SASGIS - SAS.Планета
View Issue Details
0002333SAS.ПланетаРефакторингpublic06-02-2014 08:2330-12-2021 08:59
zed 
 
normalminorhave not tried
confirmedopen 
131111 
26xxxx 
0002333: Добавить нотифаеры в качалку видимой области
Сейчас качалка никак не реагирует на смену версии/url и типа хранилища, а реагировать нужно (делать хард ресет и перезапускать закачку).

Нужно добавить нотифаер в TTileStorageOfMapType и расширить интерфейс до ITileStorageChangeble. Фактически, сейчас это хранилище изменяемое, а не простое ITileStorage, но оно никого не уведомляет о своих изменениях и шифруется под статический сторедж.

По поводу нотифаера о смене версии и url нужно смотреть дополнительно, где их там лучше сделать.
No tags attached.
related to 0002387closed vdemidov Закачка тайлов взамен удалённых 
child of 0001255confirmed  Добавить режим "Интернет без записи в кэш".  
Issue History
06-02-2014 08:23zedNew Issue
06-02-2014 12:49vdemidovNote Added: 0013740
06-02-2014 13:16zedNote Added: 0013741
06-02-2014 13:25vdemidovNote Added: 0013742
06-02-2014 13:45zedNote Added: 0013743
06-02-2014 13:50vdemidovNote Added: 0013744
06-02-2014 14:18zedNote Added: 0013745
06-02-2014 14:25zedNote Added: 0013746
06-02-2014 14:25vdemidovNote Added: 0013747
06-02-2014 14:30zedNote Added: 0013748
06-02-2014 14:35vdemidovNote Added: 0013749
06-02-2014 17:35zedNote Added: 0013750
06-02-2014 18:21vdemidovNote Added: 0013751
07-02-2014 06:28vdemidovNote Added: 0013754
08-02-2014 14:33zedStatusnew => confirmed
08-02-2014 14:33zedTarget Version => 140303
08-02-2014 14:35zedNote Added: 0013757
09-02-2014 16:55vdemidovNote Added: 0013758
17-02-2014 10:49vdemidovRelationship addedchild of 0001255
24-02-2014 16:13vdemidovNote Added: 0013858
03-03-2014 08:47vdemidovTarget Version140303 => 140404
19-03-2014 08:03vdemidovTarget Version140404 => 141111
22-03-2014 11:15zedRelationship addedrelated to 0002387
26-03-2014 04:19Djon 1File Added: 100k--m53-003.gif
26-03-2014 08:21zedFile Deleted: 100k--m53-003.gif
23-10-2014 09:04vdemidovTarget Version141111 => 150915
21-01-2015 10:39vdemidovTarget Version150915 => 151010
25-01-2015 20:07vdemidovTarget Version151010 => 150915
23-02-2015 20:27vdemidovTarget Version150915 => 151010
18-09-2015 13:58vdemidovNote Added: 0016456
10-10-2015 15:33vdemidovTarget Version151010 => 151111
06-11-2015 08:20vdemidovTarget Version151111 => 191221
21-12-2019 09:14zedTarget Version191221 => 211230
30-12-2021 08:59zedTarget Version211230 => 26xxxx

Notes
(0013740)
vdemidov   
06-02-2014 12:49   
Может не стоит вывешивать ITileStorageChangeble наружу, а просто подписываться на изменения в тайлохранилище, но перезапускать загрузку только если это обновление всего тайлохранилища, а не конкретного тайла - там есть способ их различать.
(0013741)
zed   
06-02-2014 13:16   
> а просто подписываться на изменения в тайлохранилище
Ты про какой конкретно метод и где?
(0013742)
vdemidov   
06-02-2014 13:25   
у тайлохранилища есть нотифаер, который уведомляет о всех изменениях в том числе и о полном обновлении.
(0013743)
zed   
06-02-2014 13:45   
Ты про INotifierTilePyramidUpdate? По крайней мере других нотифаеров там нету. И на что там подписываться, чтобы словить момент переключения типа хранилища с тайлового на Беркли (к примеру)?
(0013744)
vdemidov   
06-02-2014 13:50   
Да. Просто на AddListener и ловить событие с nil сообщением, а все остальные игнорировать.
(0013745)
zed   
06-02-2014 14:18   
Во-первых, это очень неочевидный способ - поди-ка догадайся сходу, что нужно ловить nil у тайлового нотифаера. Т.е. это можно рассматривать как недокументированную возможность (причём, теоретическую - см. далее). А во-вторых, при смене хранилища не прилетает вообще никаких сообщений. Сообщения прилетают только при движении карты (какие-то ITileKey).
(0013746)
zed   
06-02-2014 14:25   
И насколько я понял по исходникам, чтобы прилетел nil, должен дёргаться метод TileFullUpdateNotify, который никогда и никем на самом деле не дёргается. Плюс, есть косяк из-за которого может внезапно прилететь nil не там где надо.
(0013747)
vdemidov   
06-02-2014 14:25   
Мда. Похоже я это только планировал сделать. Ну тогда вперед. Возможно так действительно будет лучше.
(0013748)
zed   
06-02-2014 14:30   
Ок, а что по поводу версии и url (aka DefUrlBase)?
(0013749)
vdemidov   
06-02-2014 14:35   
Ну там же есть конфиг. Добавь подписку на его изменения да и ладно.
(0013750)
zed   
06-02-2014 17:35   
Подписался на изменения VersionConfig и качалка стала реагировать, а вот "отображалка" тупит. Видно как счётчик загруженных тайлов крутится и тайлы загружаются, но на экране изменения не отображаются...

Кстати, по этой же подписке прилетает и изменение типа хранилища. Короче, глючит со всех сторон :(
(0013751)
vdemidov   
06-02-2014 18:21   
Пожалуйста не трогай ничего связанного с версиями,а то мне сложно мержить будет то что я уже наковырял.
(0013754)
vdemidov   
07-02-2014 06:28   
>Видно как счётчик загруженных тайлов крутится и тайлы загружаются, но на экране изменения не отображаются...
Так и должно быть. Все дело именно в INotifierTilePyramidUpdate который при смене тайлохранилища не уведомляет ничего подписчикам потому что у нового создается новый экземпляр. Я вспомнил что это не доделал. Если сделаешь ITileStorageChangeble и в нужных местах поцепишь на него листенеры то эта проблема решиться.

>Кстати, по этой же подписке прилетает и изменение типа хранилища.
Это временно. После переделки версий и добавления в них хэшей перестанет.
(0013757)
zed   
08-02-2014 14:35   
> Если сделаешь ITileStorageChangeble
Как его лучше делать?
(0013758)
vdemidov   
09-02-2014 16:55   
Если б я знал как лучше...
(0013858)
vdemidov   
24-02-2014 16:13   
В общем нужно решать, или делать прокси для INotifierTilePyramidUpdate и возвращать его из TTileStorageOfMapType. Или делать ITileStorageChangeble и при его изменении все заинтересованные должны будут переподписываться. У этого подхода есть преимущество - пропадает один захват примитива синхронизации при каждой операции с тайлохранилищем, но появляется риск, что старый экземпляр объекта-тайлохранилища будет жить пока не закончится фоновая операция, а для операций склейки/экспорта это может быть весьма долго.
Второй вариант мне нравится больше, так что скорее всего программе предстоит еще одна массовая правка.
(0016456)
vdemidov   
18-09-2015 13:58   
Кстати, TTileStorageOfMapType уже довольно давно уведомляет о полном изменении тайлохранилища и можно было бы на это подписываться. И как я понимаю нужно еще за настройками генерации урлов для карты следить.