Krutoy 1 169 Опубликовано: 12 апреля, 2015 (изменено) Утилита скачивает и проверяет версию нового файла, переписывая программу если нужно и перезагружая компьютер. Идеальное решение если вы пишете программу локально или в одиночной игре. Так же, может работать через источник в виде облака (dropbox, например). Для установки просто вставьте это в код (http://pastebin.com/WEcJDP0r): -- ============================== -- Auto-update -- Downloading and replace running file -- ============================== K_VERSION = 1.000 -- Version of program. Need for auto-update local source = "http://pastebin.com/raw.php?i=WEcJDP0r" -- Source code of programm local function autoUpdate() -- Get version of last if not http then return end local httpResponce = http.get(source) local allText = httpResponce.readAll() httpResponce.close() local newVersion = 0 local _,verPos = string.find(allText, 'K_VERSION *= *') if verPos then newVersion = tonumber(string.match(allText, '%d+[%.?%d*]*', verPos+1)) end -- Compare and replace if K_VERSION < newVersion then local sFile = shell.getRunningProgram() local f = fs.open(sFile, "w") f.write(allText) f.close() --print("New version downloaded!") --print("Rebooting to apply changes...") os.reboot() end end autoUpdate() При выпуске патча или обновления, просто увеличивайте значение переменной версии. Изменено 12 апреля, 2015 пользователем Krutoy 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
TheScientist 100 Опубликовано: 12 апреля, 2015 Сделай и это автоматическим Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 169 Опубликовано: 13 апреля, 2015 Сделай и это автоматическим Может сделать и программирование автоматическим? Задумал дверной замок на ОС, он раз! и появился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 13 апреля, 2015 Может еще в корне программы автоматом разово (если его нет или он неправильный), создать еще файлик config.dat какой нибудь с ключом auto_upd = true. Чтобы потом юзер мог оттуда отрубить автоапдейтилку при желании. А то автор проги может уже умер давно, и не меняет никаких мастер-версий на пастебине, а прога будет еще сотни лет скачивать вновь и вновь оригинал с пастебина при каждом стартапе и надеятся, что там вышло обновление. Можно конечно в проге потом закоментить фун-ю autoUpdate(), но с конфа как-то удобнее вроде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 169 Опубликовано: 13 апреля, 2015 Может еще в корне программы автоматом разово (если его нет или он неправильный), создать еще файлик config.dat какой нибудь с ключом auto_upd = true. Чтобы потом юзер мог оттуда отрубить автоапдейтилку при желании. А то автор проги может уже умер давно, и не меняет никаких мастер-версий на пастебине, а прога будет еще сотни лет скачивать вновь и вновь оригинал с пастебина при каждом стартапе и надеятся, что там вышло обновление. Можно конечно в проге потом закоментить фун-ю autoUpdate(), но с конфа как-то удобнее вроде. Напомнил один анекдот: Встречаются две блондинки... - Представляешь, вчера случайно скачала из Интернета один файл, а он оказался мне не нужен. Теперь вот не знаю, как его обратно в Интернет закачать... - Ага! Вот из-за таких дур, как ты, скоро в Интернете совсем файлов не останется... Ничего страшного от скачивания 100кб не случится, даже если это будет продолжаться снова и снова. Но если всё таки хочется, вместо правки конфига сделай правку исходника и удали автообновление. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 13 апреля, 2015 Ничего страшного от скачивания 100кб не случится, даже если это будет продолжаться снова и снова. Но если всё таки хочется, вместо правки конфига сделай правку исходника и удали автообновление. Ну 10 скачиваний, уже 1 Мб. При учете, что у тебя их качают 200 черепах бесконечно, и ты не один на серваке, то трафик нехилый, и вроде он у нас, насколько я помню, не резиновый, но не факт, не уверен точно. Ну бог с ним, тебе видней. Пусть качает=) Но штука опасная эта, автоапдейтилка, бесконечная. Банк у нас давно так качает и апдейт ПО и прайсы и прочую лабуду. Но ОС то не рестартится после каждого пука и чиха, как безумный КК. Там можно задать периодичность проверки ПО по аптайму ПК и прочее. Сделай проверку апдейта один раз в 20 запусков, например, вот тогда точно файлы не "закончатся" в Интернете и юзер не сдохнет, если у него обновилось ПО не сразу. А еще лучше апдейт вызывать из меню программы, а не вставлять его в код напрямую при старте. Не экономишь ты ресурсы сервера совсем) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav 1 049 Опубликовано: 13 апреля, 2015 Крутой, у тебя одна хроническая проблема в прогах - оверюзинг системных ресурсов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 169 Опубликовано: 13 апреля, 2015 Крутой, у тебя одна хроническая проблема в прогах - оверюзинг системных ресурсов За то - максимальная простота в использовании и обслуживании. А вообще, где ты тут "овер*" увидел? Качать десяток килобайт по твоему это перенагрузка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 15 апреля, 2015 За то - максимальная простота в использовании и обслуживании. А вообще, где ты тут "овер*" увидел? Качать десяток килобайт по твоему это перенагрузка? Овер, овер! Не сомневайся даже. Когда это разойдется по серверу, как вирус. Сервак только и будет тем и заниматься, как качать гигабайты данных с пастебин постоянно. А для простоты обслуживания и использования и снижения нагрузки на сервер просто добавь это: local function autoUpdate() print('Procedure autoUpdate...') --сюда можешь вставить свой код автоапдейтилки end local function questionUPD() term.clear() term.setCursorPos(1,1) print('Для обновления программы нажмите Y, если это нeбходимо!') print('Программа запустится через 5 сек. в любом случае, но обновление не произойдет!') local wait_upd = os.startTimer(5) while true do local data = {os.pullEvent()} if data[1]=='timer' then if data[2] == wait_upd then print('Escape autoUpdate!') break end elseif data[1]=='key' then if keys.getName(data[2]) == 'y' then autoUpdate() break end end end end questionUPD() print('Start program...') Так будет рациональнее в 100 раз. А так не дай бог у кого-то твоя прога крашнется с безумными черепахенами и в автостартапе будет в цикле качать бесконечно там что-то сотнями лет с пастебина, а так же при каждом пуке, рестарте, перегрузке чанка и просто перестановке черепахена с места на место. Так что нагрузку ты создашь такую страшную на интернет канал и трафика сожрешь, что и блондинкам твоим не снилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 15 апреля, 2015 Что за странные слова, пукнет, черепадла, у нас тут интеллигентное сообщество. 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 15 апреля, 2015 Что за странные слова, пукнет, черепадла, у нас тут интеллигентное сообщество. Когда тебе Крутой будет неделю сервер валить ними, у тебя тоже язык не повернется называть их ласково "черепашки" КК - это безумный мод, который неограниченно может жрать ресурсы сервера, в отличии от ОС, и я не знаю, что нас с Ридом до сих пор останавливает от его сноса с сервера, видно все-таки где-то в глубине души ностальгируем и любим его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 15 апреля, 2015 КК - это безумный мод, который неограниченно может жрать ресурсы сервера, в отличии от ОС, и я не знаю, что нас с Ридом до сих пор останавливает от его сноса с сервера, видно все-таки где-то в глубине души ностальгируем и любим его. Где то о-очень глубоко. Что ни говори, а КК гораздо проще в освоении чем ОС и более интуитивно понятный. А лагульку много на чем можно сделать. Взять хотя бы WiFi-бомбу имени Семоро или заборы из BC-труб. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 15 апреля, 2015 Где то о-очень глубоко.Что ни говори, а КК гораздо проще в освоении чем ОС и более интуитивно понятный. А лагульку много на чем можно сделать. Взять хотя бы WiFi-бомбу имени Семоро или заборы из BC-труб. Вот, может если его не было вообще сангар не сделал бы ОК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 15 апреля, 2015 Вот, может если его не было вообще сангар не сделал бы ОК. Ну может быть. Но с другой стороны, мы же не используем Windows 3.11, так как она проще и с нее все начиналось когда-то, так ведь? П.С. А для черепах, ладно, так и быть, не буду использовать термин "черепадлики". , раз это так вам не нравится, что аж Крутой там лайкнул=) Теперь у черепах кодовое название "ЧП"! Так нормально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav 1 049 Опубликовано: 15 апреля, 2015 Гораздо более рационально делать так: 2 пастбина. 1 - Центр обновлений 2 - Программа Центр обновлений - это обычный файл на пастбине, который имеет в себе лишь 2 строки v1.0.0.7 - к примеру версия текущая BlaHbLah - код пастбина с программкой Обновляясь прога GET запросом получит текущую актуальную версию и пастбин, на которой её можно скачать. Если есть более новая версия, то прога её скачает с указанного пастбина С учетом того, что размеры данного GET запроса незначительны + хедеры + офсет пакета так же не велики(офсет и тело) С учетом даже частой проверки актуальности версии - нагрузка будет гораздо ниже. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Krutoy Автор темы 1 169 Опубликовано: 16 апреля, 2015 Гораздо более рационально делать так: 2 пастбина. 1 - Центр обновлений 2 - Программа Да, согласен. Это решение было бы менее затратным по траффику. Но когда я активно прогаю, делаю примерно по 20 изменений кода в день, поэтому подкручивать 2 файла по отдельности будет труднее. В любом случае, имея 100мб/с траффик не стоит задумываться о 100кб загрузках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах