Станислав Макаров: DownloadFileAsync. Только если я буду писать в поток, а программа завершится, выключится компьютер, например, то ничего не сохранится, так как поток будет в памяти.
Ищу примеры, чтобы подобное попробовать реализовать.
Остановился на следующем варианте:
При запуске клиента проверяется наличие файла с версией. Если такового нет, то происходит операция полного обновления (Загружается список всех файлов и сверяются их хеши с теми, что присутствуют в клиенте. Совпадения удаляются на этапе проверки. Недостающие загружаются.).
Если файл есть и версия совпадает, то загружается легкий файл со списком всех каталогов. Если все каталоги на месте, то разрешаем запустить игру. Если какой то отсутствует, то происходит операция полного обновления.
Если файл есть и версия не совпадает, но версия клиента присутствует в истории версий на сервере, то загружается список версий от версии клиента до текущей и накатываются патчи, после чего загружается легкий файл со списком всех каталогов. Если все каталоги на месте, то разрешаем запустить игру.
Причина, по которой я сделал так - равнение на крупные игровые проекты, типа Steam, 4Game, Origin. Касательно Steam в шапке я ошибался - отсутствие даже важных файлов для игры не является поводом для обновления.
Всем большое спасибо за участие. Методы, которые были описаны вами, но мной не использованы, я взял на вооружение.
У 4Game, например, сделано иначе:
Вышло обновление - загружаем обновление.
И после обновления файлы не загрузятся те, которые были удалены до начала последнего обновления, если они в этот апдейт не входили.
Уже остановился на конкретном варианте, напишу в комментарии под шапкой.
Тем не менее, проверка всех файлов осуществляться будет, а не той части, что необходима. Этот момент тоже интересует отчасти.
Предположим, есть следующая иерархия:
dir1
dir1_1
dir1_2
dir1_3
dir2
dir2_1
dir2_2
dir2_3 (файл в этом каталоге был изменен/удален)
dir3
dir3_1
dir3_2
dir3_3
Соответственно, время изменения содержимого каталога dir2_3 будет отличаться от серверного. А если там есть вложенные подкаталоги, то и время тех директорий, в которых в конце концов изменялся/удалялся файл.
А значит быстрее будет пробежаться поверхностно по датам изменения каталогов и сравнить их с серверными значениями и если есть несоответствия, уже шерстить по этому каталогу.
В приведенном примере проверятся даты каталогов dir1,dir2,dir3 и дальше будут проверяться даты только каталогов в директории dir2. Остальные проигнорируются.
Или я ошибаюсь и могу натолкнуться на какие то подводные камни?
Про хеши файлов я подумал в первую очередь. Но не определился с способом проверки этих хешей. Либо рекурсивно бежать по каталогам и хэш каждого файла отправлять на сервер и там сверять (банально класть рядом с файлами на сервере файл с таким же названием, но расширением .sum, где будет прописан хэш этого файла) либо загружать на период проверки файл со всеми путями и хешами и проверять локально. В первом случае будет много запросов на сервер. Во втором же слишком уж тяжелый файл придется держать в памяти. Файлов то очень много.
Пока склоняюсь именно к промежуточным патчам (1>2,2>3,3>4). Самый оптимальный вариант.
з.ы. эдакая у Вас подпись, спасибо, что счет не выписали)
Да, в этом есть смысл, этот способ хорошо дополняет идею с патчами. И мне такой способ нравится, за исключением одного - после каждого обновления клиента игры на сервере придется заново создавать все патчи для обновления до последней версии.
chupasaurus: "не заворачиваются" - в смысле, не кешируются? А какая разница? DNS только адрес отдает. Соединение от клиента до сервера устанавливается не через DNS. Так или иначе провайдер может благополучно закрыть доступ к определенному IP.
Night: у меня к WM карта привязана и как раз таки Альфа-банка. Каждый день уже на протяжении двух, по-моему, месяцев вижу такую картину: i.imgur.com/7dCJsqD.png
ЯД выводят на карту с бОльшей комиссией, нежели на счет.
По-сути, Вы мне предлагаете делать больше платежей из ЯДа на карту банка, что подразумевает переплату комиссии. Это кажется, что всего лишь на 30 рублей большей. Подумаешь, копейки.
10 выводов за полторы недели, например, это уже 600 рублей.
Скорость вывода из QIWI меня мало интересует, у нас там средства не хранятся.
Night: WM может моментально выводить на карту только посредством p2p перевода через биржи, при условии, что второй участник, которому нужны WM, найдется моментально, а не придется ждать или искать его несколько суток.
ЯД не выводят моментально.
По-сути, бОльшая часть средств у нас на счету InterKassa, так как там прием средств с QIWI и с мобильных телефонов. Средства на WM менее востребованы, мы сейчас попросту на WM вывод отключили.
Не совсем надуманная, я назвал причину - неудобство, посему и ищем агрегатора, где можно объединить прием всех средств воедино.
Сама же Interkassa отпадает - периодически отваливается ЯД, банковские карты (до сих пор недоступны).
Совершенно неудобно распоряжаться средствами, которые одновременно на WM кошельке, Yandex счете и в Interkassa.
Ладно бы если перевод в банк занимал ~сутки, но нет, из Interkassa на карту Российского банка в данный момент не выводят, поэтому приходится сперва в w1, потом ждать, когда придут туда (~2 суток), после чего на карту банка.
И из Yandex платежи идут на карту банка ~3 суток.