Перейти к содержимому
Krutoy

Автообновление программ [CC]

Рекомендуемые сообщения

qId2GD3.png

 

Утилита скачивает и проверяет версию нового файла, переписывая программу если нужно и перезагружая компьютер.

Идеальное решение если вы пишете программу локально или в одиночной игре. Так же, может работать через источник в виде облака (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()

 

При выпуске патча или обновления, просто увеличивайте значение переменной версии.

Изменено пользователем Krutoy

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделай и это автоматическим :)

Может сделать и программирование автоматическим? Задумал дверной замок на ОС, он раз! и появился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может еще в корне программы автоматом разово (если его нет или он неправильный), создать еще файлик config.dat  какой нибудь с ключом auto_upd = true.

 

Чтобы потом юзер мог оттуда отрубить автоапдейтилку при желании. А то автор проги может уже умер давно, и не меняет никаких мастер-версий на пастебине, а прога будет еще сотни лет скачивать вновь и вновь оригинал с пастебина при каждом стартапе и надеятся, что там вышло обновление. Можно конечно в проге потом закоментить фун-ю autoUpdate(), но с конфа как-то удобнее вроде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Может еще в корне программы автоматом разово (если его нет или он неправильный), создать еще файлик config.dat  какой нибудь с ключом auto_upd = true.

 

Чтобы потом юзер мог оттуда отрубить автоапдейтилку при желании. А то автор проги может уже умер давно, и не меняет никаких мастер-версий на пастебине, а прога будет еще сотни лет скачивать вновь и вновь оригинал с пастебина при каждом стартапе и надеятся, что там вышло обновление. Можно конечно в проге потом закоментить фун-ю autoUpdate(), но с конфа как-то удобнее вроде.

 

Напомнил один анекдот:

Встречаются две блондинки...
- Представляешь, вчера случайно скачала из Интернета один файл, а он оказался мне не нужен. Теперь вот не знаю, как его обратно в Интернет закачать...
- Ага! Вот из-за таких дур, как ты, скоро в Интернете совсем файлов не останется...

Ничего страшного от скачивания 100кб не случится, даже если это будет продолжаться снова и снова.

Но если всё таки хочется, вместо правки конфига сделай правку исходника и удали автообновление.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Ничего страшного от скачивания 100кб не случится, даже если это будет продолжаться снова и снова.

Но если всё таки хочется, вместо правки конфига сделай правку исходника и удали автообновление.

 

 

Ну 10 скачиваний, уже 1 Мб. При учете, что у тебя их качают 200 черепах бесконечно, и ты не один на серваке, то трафик нехилый, и вроде он у нас, насколько я помню, не резиновый, но не факт, не уверен точно.

Ну бог с ним, тебе видней. Пусть качает=)  Но штука опасная эта, автоапдейтилка, бесконечная.

 

Банк у нас давно так качает и апдейт ПО и прайсы и прочую лабуду.

 

Но ОС то не рестартится после каждого пука и чиха, как безумный КК. Там можно задать периодичность проверки ПО по аптайму ПК и прочее. Сделай проверку апдейта один раз в 20 запусков, например, вот тогда точно файлы не "закончатся" в Интернете :) и юзер не сдохнет, если у него обновилось ПО не сразу. А еще лучше апдейт вызывать из меню программы, а не вставлять его в код напрямую при старте. Не экономишь ты ресурсы сервера совсем)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Крутой, у тебя одна хроническая проблема в прогах - оверюзинг системных ресурсов

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Крутой, у тебя одна хроническая проблема в прогах - оверюзинг системных ресурсов

За то - максимальная простота в использовании и обслуживании.

А вообще, где ты тут "овер*" увидел? Качать десяток килобайт по твоему это перенагрузка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

За то - максимальная простота в использовании и обслуживании.

А вообще, где ты тут "овер*" увидел? Качать десяток килобайт по твоему это перенагрузка?

 

Овер, овер! Не сомневайся даже. Когда это разойдется по серверу, как вирус. Сервак только и будет тем и заниматься, как качать гигабайты данных с пастебин постоянно.

 

А для простоты обслуживания и использования и снижения нагрузки на сервер просто добавь это:

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 раз.

 

А так не дай бог у кого-то твоя прога крашнется с безумными черепахенами и в автостартапе будет в цикле качать бесконечно там что-то сотнями лет с пастебина, а так же при каждом пуке, рестарте, перегрузке чанка и просто перестановке черепахена с места на место. Так что нагрузку ты создашь такую страшную на интернет канал и трафика сожрешь, что и блондинкам твоим не снилось.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что за странные слова, пукнет, черепадла, у нас тут интеллигентное сообщество.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что за странные слова, пукнет, черепадла, у нас тут интеллигентное сообщество.

 

Когда тебе Крутой будет неделю сервер валить ними, у тебя тоже язык не повернется называть их ласково "черепашки" :) 

 

КК - это безумный мод, который неограниченно может жрать ресурсы сервера, в отличии от ОС, и я не знаю, что нас с Ридом до сих пор останавливает от его сноса с сервера, видно все-таки где-то в глубине души ностальгируем и любим его. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

КК - это безумный мод, который неограниченно может жрать ресурсы сервера, в отличии от ОС, и я не знаю, что нас с Ридом до сих пор останавливает от его сноса с сервера, видно все-таки где-то в глубине души ностальгируем и любим его. 

Где то о-очень глубоко.

Что ни говори, а КК гораздо проще в освоении чем ОС и более интуитивно понятный. А лагульку много на чем можно сделать. Взять хотя бы WiFi-бомбу имени Семоро или заборы из BC-труб.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Где то о-очень глубоко.

Что ни говори, а КК гораздо проще в освоении чем ОС и более интуитивно понятный. А лагульку много на чем можно сделать. Взять хотя бы WiFi-бомбу имени Семоро или заборы из BC-труб.

Вот, может если его не было вообще сангар не сделал бы ОК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот, может если его не было вообще сангар не сделал бы ОК.

 

Ну может быть. Но с другой стороны, мы же не используем Windows 3.11, так как она проще и с нее все начиналось когда-то, так ведь?

 

П.С. А для черепах, ладно, так и быть, не буду использовать термин "черепадлики".   :D , раз это так вам не нравится, что аж Крутой там лайкнул=)

Теперь у черепах кодовое название "ЧП"! Так нормально? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гораздо более рационально делать так:

2 пастбина.

 

1 - Центр обновлений

2 - Программа

 

Центр обновлений - это обычный файл на пастбине, который имеет в себе лишь 2 строки

 

v1.0.0.7 - к примеру версия текущая

BlaHbLah - код пастбина с программкой

 

 

Обновляясь прога GET запросом получит текущую актуальную версию и пастбин, на которой её можно скачать.

Если есть более новая версия, то прога её скачает с указанного пастбина

 

С учетом того, что размеры данного GET запроса незначительны + хедеры + офсет пакета так же не велики(офсет и тело)

С учетом даже частой проверки актуальности версии - нагрузка будет гораздо ниже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Гораздо более рационально делать так:

2 пастбина.

 

1 - Центр обновлений

2 - Программа

Да, согласен. Это решение было бы менее затратным по траффику.

Но когда я активно прогаю, делаю примерно по 20 изменений кода в день, поэтому подкручивать 2 файла по отдельности будет труднее.

 

В любом случае, имея 100мб/с траффик не стоит задумываться о 100кб загрузках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...