Remyc |
Отправлено: 01 Октября, 2020 - 14:24:29
|
Участник
Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019
Репутация: 1
|
На данный момент есть скрипт загруженный на сервер.
Пользователи загружают демонстрационное приложение и используют скрипт.
Проблема:
Скрипт часто меняется и обновляется (в части ресурсов!) для чего необходима постоянная пересборка и перекачка пользователями приложения.
Пробовал организовать обновление как описано в одной из тем (создаем переменную с версией, на фтп ложим файл txt c актуальной версией и новый собранный ехе, скрипт при старте проверяет версию и скачивает, если версия забитая в скрипте, не соответствует версии написанной в тхт на фтп)
В итоге столкнулся с проблемой, что при обновлении скрипта на сервере Кибор, переменная с новой версией подгружается у пользователя при старте пользовательского ехе, само собой обновления ехе (и ресурсов в нем в частности) не происходит и ничего не работает (у пользователя)
Есть ли варианты решения этой проблемы?
На ум пока приходит 2 варианта:
1. Если возможно сравнить блок RESOURCE в скрипте и упакованные файлы в приложении, сравниваем и при отличии в ресурсах скачиваем новую версию. Но Как это выполнить я не знаю, есть ли такая возможность?
2. (Не особо мне нравится, но на первый взгляд выполним) При распаковке ресурсов, проверять, все ли распаковалось и если какая-то из функций unpack возвращает -1 ( или меньше ноля?) перекачивать версию. Минус этого метода еще в том, что при попытке распаковать отсутствующий ресурс, вылетит сообщение с ошибкой. Можно ли избежать этого сообщения, чтобы работа скрипта не прерывалась?
Есть еще третий вариант, загружать с фтп каждый рисунок, длл, базу, но это только изображений больше 90.... Так что сколько это будет по времени не совсем ясно(Отредактировано автором: 01 Октября, 2020 - 14:32:53) |
|
|
Zireael |
Отправлено: 02 Октября, 2020 - 01:48:49
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: при попытке распаковать отсутствующий ресурс, вылетит сообщение с ошибкой. Можно ли избежать этого сообщения, чтобы работа скрипта не прерывалась?
CODE:if(fopen("C:\1.bmp", "rb")==0)
{
messagebox("Файл отсутствует");
// нужные действия
}
else fclose(); |
|
|
Remyc |
Отправлено: 02 Октября, 2020 - 17:23:11
|
Участник
Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019
Репутация: 1
|
Попробовал сделать так:
CODE:
int Image_0_KIB[96][28];
...
int Image_90_KIB[47][45];
char text[9999999];
string path;
int count_byte;
int max=90;
string name[99999];
string location[99999];
name[0]="çíàíèÿ2.bmp";
...
name[90]="ïëãåð.bmp";
location[0]="media/9ebce3_53edc606e61344eab09e17fefe09ab53~mv2.png";
...
location[90]="media/9ebce3_acb9becdb9e4443bad7795b4314a721a~mv2.png";
for (int foto=0; foto <= max; foto++)
{
path = tempfolder()+name[foto];
count_byte=sendgetweb(#text[0], "Mozilla", "GET", "https:/^/static.wixstatic.com", location[foto]);
if (fopen(path, "r"))
{
fclose();
}
else
{
if(count_byte>0)
{
if(fopen(path, "wb"))
{
fwriteb(#text[0], count_byte);
fclose();
}
}
}
loadimage ("#Image_"+format(foto)+"_KIB[0][0]", path);
}
И все нормально, кроме:
CODE:loadimage ("#Image_"+format(foto)+"_KIB[0][0]", path);
Функция принимает первым аргументом указатель, а в итоге получает string. Не пойму пока как обойти можно.
Есть варианты? Ну кроме как 90 раз вызывать loadimage ......(Отредактировано автором: 02 Октября, 2020 - 17:24:36) |
|
|
Remyc |
Отправлено: 02 Октября, 2020 - 17:56:34
|
Участник
Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019
Репутация: 1
|
Kibor пишет: Может так?
CODE:int Image_KIB[90][47][45];
loadimage (#Image_KIB[foto][0][0], path);
Тогда весь скрипт переписывать надо....
дописал так:
CODE:
if (fopen ("C:\000001.txt", "w")!=0)
{
for (int m=0; m<foto; m++)
{
fwrite("loadimage (#Image_");fwrite(m); fwrite("_KIB[0][0], tempfolder()+^"");
fwrite(name[m]); fwrite("^");");fwrite(ENDL);
}
fwrite("messagebox(^"loadimage ^"+format(m));");
fclose();
}
#include "C:\000001.txt";
Но это 13 секунд если все ресурсы есть в Temp уже.... А если ресурсов нет вообще, то 115 секунд запуска...(Отредактировано автором: 02 Октября, 2020 - 18:00:18) |
|
|
Remyc |
Отправлено: 02 Октября, 2020 - 18:20:25
|
Участник
Покинул форум
Сообщений всего: 67
Дата рег-ции: Апр. 2019
Репутация: 1
|
Kibor пишет: Не путайте исполняемый код и данные string
Это ваше #include "C:\000001.txt";
сработает только при сборке EXE и то что в 000001.txt превратится в исполняемый код, который не меняется после сборки exe.
А вот этого я не учел... Спасибо!!!
Видимо все-таки придется руками вписывать loadimage для каждого рисунка...
Хотя они у меня уже есть в "C:\000001.txt"
то- есть можно спокойно убирать блок кода, который записывает C:\000001.txt, а #include "C:\000001.txt" оставлять, просто при добавлении новых изображений вручную его дописывать?(Отредактировано автором: 02 Октября, 2020 - 18:25:00) |
|
|
Kibor |
Отправлено: 02 Октября, 2020 - 18:46:25
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Почему бы так не сделать?
CODE:int image0[200][200];
int image1[200][200];
int image2[200][200];
//-1 ошибка
//0 файл есть
//>0 загружен
messagebox (load_image(#image0[0][0], "C:\bot\image0.bmp", "files/Image_0.bmp"));
messagebox (load_image(#image1[0][0], "C:\bot\image1.bmp", "files/Image_1.bmp"));
messagebox (load_image(#image2[0][0], "C:\bot\image2.bmp", "files/Image_2.bmp"));
function load_image(int #Image[0][0], string file_C, string file_S)
{
if (fopen (file_C, "r")!=0){fclose(); return 0;}
else
{
char text[9999999];
int count_byte=sendgetweb(#text[0], "Mozilla", "GET", "https:/^/kibor-bot.com", file_S);
if(count_byte>0)
{
if(fopen(file_C, "wb"))
{
fwriteb(#text[0], count_byte);
fclose();
}
}
return loadimage (#Image[0][0], file_C);
}
return -1;
}
|
|
|
|