SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001841SACS.Планета[All Projects] Хотелкаpublic01-03-2013 06:2909-08-2013 15:13
Reportervasketsov 
Assigned Tovasketsov 
PriorityhighSeverityminorReproducibilityN/A
StatusclosedResolutionfixed 
PlatformWindowsOSVistaOS VersionUltimate
Product Version 
Target VersionFixed in Version130803 
Summary0001841: Реализовать возможность использования ScriptControl
DescriptionПодключить ScriptControl для унифицированного запуска скриптов на разных скриптовых языках.
Additional Informationhttp://msdn.microsoft.com/en-us/library/aa227400%28v=vs.60%29.aspx
TagsNo tags attached.
Attached Filesrar file icon PerlScriptText.rar [^] (652 bytes) 01-03-2013 17:45
zip file icon mobile.yandex.zmp.zip [^] (5,616 bytes) 03-03-2013 17:03
rar file icon mobile.yandex.zmp.rar [^] (3,488 bytes) 05-03-2013 10:13

- Relationships

-  Notes
(0010756)
vasketsov (manager)
01-03-2013 17:45

Чтобы потестить:
1. В params.ini надо добавить что-то типа:
[ScriptControl]
Filename=PerlScriptText.txt
NeedSync=1
Language=PerlScript
Function=sas_main
InputParamNames=x,y,z,q

2. Создать файлик PerlScriptText.txt с содержимым типа приаттаченного (там пример для ч/б нокии) и кинуть его в zmp.
(0010757)
vasketsov (manager)
01-03-2013 17:49

По поводу параметров:
xy - тайловые координаты
z - зум (от 1)
q - quadkey
v - version
Порядок параметров любой, но должен соответствовать скрипту, обязательных параметров нет.
Имя функции любое (лишь бы она была в скрипте).
Файл скрипта должен быть с расширением txt.
(0010758)
zed (manager)
02-03-2013 04:48

Это типа альтернатива GetUrlScript? Или что куда вообще?
(0010759)
vasketsov (manager)
02-03-2013 07:26

GetUrlScript можно переименовать, чтобы туда не лазило.
Хотя по идее задумано, что если указано [ScriptControl] и есть файлик - паскальскрипт для этой карты не используется.

Скрипт (функция в нём, с именем из Function) должен получать параметры, указанные в InputParamNames (в примере x,y,z,q, пусть даже первые три и не используются, их можно и убрать, но оставлено, версии тут нет). Чё-то я не подумал, что дефолтный урл из zmp (из params.txt) тоже можно пропихнуть, надо будет сделать.

Функция возвращает либо код ошибки (как int, если надо - можно добавить и заголовки, но придётся смотреть длину массива и типы значений), либо массивчик значений типа кода статуса http, длины ответа, заголовков, собственно ответа, типа контента, там в примере скрипта это прокомментировано. Вернуться должен variant array. Качает тайл и делает всё прочее нужное скрипт сам.

Возвращение из скрипта одного строкового параметра зарезервировано для информирования саса о том, что требуемый тайл уже скачан и лежит там-то, соответственно в этом случае из скрипта передаётся полный путь, и далее логика ровно та же самая, как я делал для протокола file:// - тип контента, размер и тело берётся из файла, то есть тут ничего больше передавать не надо.

Как а) писать на других языках и б) что указывать как Language (PhpScript или VBScript или JScript какой) скорее всего я не подскажу, первое их апологетам известно лучше, второе скорее всего можно найти по ссылке на msdn выше (или вообще примеры в инете).
(0010783)
zed (manager)
03-03-2013 17:05

Приаттачил zmp - почему-то выскакивает InternalError, хотя сам скрипт из командной строки работает нормально.
(0010788)
vasketsov (manager)
04-03-2013 11:10

>почему-то выскакивает InternalError
Ага, есть такое, с моим приаттаченным тоже бывает. Иной раз скачаешь пяток тайлов - на 6-й раз вылезет, перекачиваешь тайл - нормально скачивает (причём там если синхронизация - используется критическая секция, так что по двое никто никуда не пролезет). Где-то что-то кривится внутри ScriptControl похоже, или сборщик мусора какой-нибудь гадит. Потому и взял попробовать ещё ActiveScript.
(0010790)
zed (manager)
04-03-2013 16:34

>Иной раз скачаешь пяток тайлов
У меня ещё печальнее - ни одного тайла скачать не получается...
(0010791)
vasketsov (manager)
04-03-2013 18:08

Пописал ScriptControl:
1. Добавил CoInitialize.
2. Параметры скрипта убрал из экземпляра и сделал на стеке как VarArray.
У меня эта ошибка пропала. Даже в режиме кэш+интернет нокия стала грузиться )).
Так что поверяй.
ps. Правда я так и не рискнул пока что многопоточно через ScriptControl качать.

Вариант с ActiveScript недоковырен, там надо Invoke сделать (чтобы функцию с параметрами позвать), но если реализация с ScriptControl заработает и будет устраивать по скорости и надёжности - забью и выпилю ActiveScript.
(0010793)
zed (manager)
04-03-2013 19:03

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

Глянь скрипт опытным глазом? Я в perl не силён, может крепко нахомутал чё.
(0010794)
vasketsov (manager)
04-03-2013 20:21

Я пробовал поглядеть - из того, что в глаза бросилось - это \? (зачем там \ не пойму) да вызов функции ym_get_boundary без параметров и без скобок (чего перл не любит в зависимости от фазы луны).
Больше ничего не углядел, но особо и не ковырялся. Убрал \ и добавил скобки - не полегчало, где-то что-то хитрее.

Сделал ActiveScript - так он у меня и на нокии работает
А на твоём яндексе всё то же InternalError.
Чую где-то там косяк, отлаживаться надо...

А вообще погляди у себя какие есть парсеры.
Это смотрится в реестре по разделам вида:
HKEY_CLASSES_ROOT\PerlScript\OLEScript
HKEY_CLASSES_ROOT\VBScript\OLEScript
может есть
HKEY_CLASSES_ROOT\PhpScript\OLEScript
например или
HKEY_CLASSES_ROOT\JScript\OLEScript
Не PerlScript-ом же единым...
(0010795)
vasketsov (manager)
05-03-2013 10:21

Загрузил mobile.yandex.zmp.rar - вот так работает.
Что называется найдите 10 отличий )))
Вырезал всё и кусками назад затаскивал.
Из важного - перенёс UserAgent и сделал KeepAlive.
Короче говоря через ScriptControl пашет, лажается у меня 1 тайл из нескольких десятков.

А вот через ActiveScript валится чаще.

Переделал в общей ini-шке
[ScriptControl]
UseScriptControl=1

если 1 - ScriptControl, если 2 - ActiveScript, по умолчанию 0 - ничего.
(0010796)
vasketsov (manager)
05-03-2013 10:49

Ещё б придумать как отладочные сообщения при загрузке скрипта при работе из-под Delphi придушить...
(0010806)
vasketsov (manager)
05-03-2013 13:23
edited on: 05-03-2013 13:37

Если кому будет интересно:

Для php (ActivePHP) тут:
http://pecl.php.net/package/PHPScript
   As of PHP 5.0.1, ActiveScript has been moved to the PECL repository.
   The DLL for this PECL extension may be downloaded from either the PHP
   Downloads page or from http://pecl4win.php.net/
Но можно забрать отсюда
http://museum.php.net/php4/
в версии php-4.4.9-Win32.zip

Для perl (PerlScript) ставится сразу при установке ActiveState ActivePerl (там же есть активный питон, но мопед не мой...)

VBScript и JScript есть сразу

(0010808)
zed (manager)
05-03-2013 17:21

Походу этот InternalError только под дебагером вылетает, потому как обычная дебажная версия с EurekaLog качает исправно и без ошибок. Спасибо за фиксы!

>Ещё б придумать как отладочные сообщения при загрузке скрипта при работе из-под Delphi придушить...
Не встречал таких. Что за сообщения?

А вообще, конечно, фигово, что исправно работающий скрипт может глючить через этот ScriptControl. Когда я встраивал php, помницца, таких проблем небыло. Так что может быть и стоит возродить его из пепла, тем более, что для работы там требовалась всего одна dll без какой-либо необходимости регистрации её в системе.
(0010810)
vasketsov (manager)
05-03-2013 20:20

>Что за сообщения?
Ну OutputDebugString которые, когда из-под delphi запускаешь - внизу в окно валятся, типа DLL заружена, поток создан-убит, так вот при загрузке скрипта туда столько валится, что время запуска саса из-под delphi заметно увеличивается.

>фигово, что исправно работающий скрипт может глючить через этот ScriptControl
ну не сказать что уж прямо сильно глючит ))) скорее это можно охарактеризовать как "полная задница с обработкой информации об ошибках".

>качает исправно и без ошибок
У меня возникла мысль, что ошибка может быть из-за того, что в рабочем потоке не выполнено CoInitialize. Ну не будешь же перед запуском скрипта каждый раз её выполнять ))) а вот при ошибке оно каким-то макаром инициализируется, соответственно тот workaround, который я сделал для пустого ответа из скрипта - и отрабатывает. По крайней мере по косвенным признакам это так (не более 1 ошибки при однопоточном доступе, повторно отрабатывает верно).

>может быть и стоит возродить его из пепла
Так погляди, может и стоит.
В принципе ничего универсальнее не сделаешь, но если будет выигрыш в надёжности или скорости - будет замечательно.
(0010837)
vasketsov (manager)
07-03-2013 12:00

Пока что рекомендуется использовать ScriptControl.
Но ActiveScript не вырезан (и в частности доступен для тестирования и допиливания).
Если надо будет в скрипты пропихивать объекты из саса, добавить параметры, что-нибудь изменить - пишите отдельными тикетами. А этот работает - и ладно.

- Users who viewed this issue
User List Anonymous (2459x), StarvinMarvin (1x), iceon (1x)
Total Views 2461
Last View 20-04-2024 03:47

- Issue History
Date Modified Username Field Change
01-03-2013 06:29 vasketsov New Issue
01-03-2013 06:29 vasketsov Status new => assigned
01-03-2013 06:29 vasketsov Assigned To => vasketsov
01-03-2013 17:45 vasketsov Note Added: 0010756
01-03-2013 17:45 vasketsov File Added: PerlScriptText.rar
01-03-2013 17:49 vasketsov Note Added: 0010757
02-03-2013 04:48 zed Note Added: 0010758
02-03-2013 07:26 vasketsov Note Added: 0010759
03-03-2013 17:03 zed File Added: mobile.yandex.zmp.zip
03-03-2013 17:05 zed Note Added: 0010783
04-03-2013 11:10 vasketsov Note Added: 0010788
04-03-2013 16:34 zed Note Added: 0010790
04-03-2013 18:08 vasketsov Note Added: 0010791
04-03-2013 19:03 zed Note Added: 0010793
04-03-2013 20:21 vasketsov Note Added: 0010794
05-03-2013 10:13 vasketsov File Added: mobile.yandex.zmp.rar
05-03-2013 10:21 vasketsov Note Added: 0010795
05-03-2013 10:49 vasketsov Note Added: 0010796
05-03-2013 13:23 vasketsov Note Added: 0010806
05-03-2013 13:25 vasketsov Note Edited: 0010806 View Revisions
05-03-2013 13:33 vasketsov Note Edited: 0010806 View Revisions
05-03-2013 13:37 vasketsov Note Edited: 0010806 View Revisions
05-03-2013 17:21 zed Note Added: 0010808
05-03-2013 20:20 vasketsov Note Added: 0010810
07-03-2013 12:00 vasketsov Note Added: 0010837
07-03-2013 12:01 vasketsov Status assigned => resolved
07-03-2013 12:01 vasketsov Resolution open => fixed
09-08-2013 15:00 vasketsov Fixed in Version => 130803
09-08-2013 15:13 vasketsov Status resolved => closed



Copyright © 2007 - 2024 SAS.Planet Team