Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
1
.NET 4.x

Обновление с удаленного сервера (лаунчер для игры)

21.11.2012, 08:29. Показов 2705. Ответов 15
Метки нет (Все метки)

Приветствую всех! Прошу Вашего совета или помощи в следующей задаче:
есть приложение (игровой "лаунчер") который помимо прочих действий должен уметь автоматически обновлять файлы клиента игры. Как я себе это представляю.

При запуске, "лаунчер" проверяет наличие новой версии на удаленном сервере, затем сравнивает полученную версию с версией клиента и в случае если версия клиента ниже версии на удаленном сервере - обновляет клиента. Определение версии можно осуществить через блокнот, т.е. в блокноте будет указываться актуальная версия и программно считывать значения прописанные в нем.

Причем, каждое обновление содержит разное количество файлов, и раскидывает их по разным частям клиента. Это представляю так: на удаленном сервере содержатся разные папки (например "update_1", "update_2", "update_n") в папках содержатся каталоги идентичные каталогам из клиентской части (например, подкаталогами "update_1" будут папки: "base", "music", "textures" с находящимися в них обновленными файлами) при нажатии кнопки "обновить", все каталоги находящиеся на удаленном сервере из папки "update_2" вместе с файлами в них, копируются с заменой клиенту. Но тут встает дилемма, ведь клиент может зайти с совсем древней версией, и ему понадобится выкачать не только update_2 но и update_1 причем обновления он должен получать в порядке возрастания... как реализовать такое не представляю (делать большой кумулятивный патч с определенной версии если только...) может как-то с md5 поиграть... нет идей =)

С теорией все хорошо, но вот с реализацией дела обстоят хуже, подскажите как можно реализовать такой механизм. Для наглядности во вложении можете посмотреть как все примерно должно смотреться.
0
Вложения
Тип файла: rar AutoUpdater.rar (62.6 Кб, 78 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.11.2012, 08:29
Ответы с готовыми решениями:

Лаунчер для игры: сделать авторизацию, запуск клиента, показ скина, и показ личного счета
Доброго времени суток ! Я создаю лаунчер одной игры( Minecraft ) Можете ли вы мне помочь с этим?...

Выбор сервера для онлайн-игры
Добрый день.Потихоньку пишу небольшую онлайн игру.:)Но у меня возник вопрос.Какой лучше выбрать...

Делаю лаунчер для игры необходимо сделать запуск наальной страницы сайта сервера
//--------------------------------------------------------------------------- #include <vcl.h>...

Лаунчер для игры MineCraft
Нашел интересный Батник запуска игры (Майнкрафт) , созданный человеком под ником KRON. Суть в...

__________________
15
386 / 375 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
21.11.2012, 12:00 2
Читай FAQ там есть пример.
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
22.11.2012, 08:37  [ТС] 3
спасибо за заданное направление, все что искал нашел, но появился другой вопрос.

в этом коде: (взято отсюда)
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
#Region "Variables"
    Dim WithEvents DownloadClient As New WebClient
    Dim OriginString As New List(Of StringList) ' массив оригинальных строк с путями для закачки, хешами и относительными путями назначения
    Dim ResultString As New List(Of StringList) ' список отобранного для загрузки
    Dim CurrentNum As Integer = 0
    Dim RootFolder As String = "C:\Users\Yupatov\Desktop\папка1" ' локальная корневая папка
    Dim NetFolder As String = "http://mytestsource.narod.ru/folder1/" ' корневая папка на сервере, гле размещен файл с информацией. Файлы для загрузки могут быть в другом месте
    Dim IsFileLoading = False
    Dim Errorlog As String = String.Empty ' пустая строка. В процессе загрузки сюда пишется лог ошибок, если они есть. Потом ее можно прочитать (например, отобразить в MsgBox)
    Dim InfoFile As String = "UpdateInfo.upd" ' имя файла с информацией на сервере
    Dim seprow() As Char = {vbCr, vbLf} ' сепараторы для нарезки на строки
    Dim sepcell() As String = {"[cell]"} ' сепаратор нарезки отдельных строк
#End Region
взят абсолютный путь к определенной папке хранящийся в RootFolder, мне же необходимо чтобы пользователь сам указывал путь к папке и этот путь сохранялся во внешнем файле.

и реализовал я это следующим образом:
vb.net
1
Dim RootFolder As String = My.Computer.FileSystem.ReadAllText("Settings.dtx")
но теперь необходимо:
1) чтобы при первом запуске программы пользователь указал путь к папке с установленной игрой, также необходима проверка правильности указанного пути, сделать это можно по файлу запуска самой игры "KF_launcher.exe", при условии, что все условия выполнены путь сохраняется в файле "Settings.dtx" (и если такого файла нет, то он создается);
2) при последующих запусках программы производилась проверка наличия файла "KF_launcher.exe" в сохраненном в файле "Settings.dtx" пути, если же файл по указанному пути не найден или отсутствует файл "Settings.dtx" запускать пункт 1);

Также у меня есть некоторые наработки с предыдущего проекта, но не могу подогнать их под текущие нужды:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Private Sub startgame_Click(sender As Object, e As EventArgs) Handles startgame.Click
        Me.Hide()
        Dim SoursPath As String
        Dim procID As Integer
        Dim FolderBrowserDialog1 As New FolderBrowserDialog()
        Dim GamePath As String
        Dim Path As String
 
        SoursPath = My.Computer.FileSystem.CurrentDirectory
        FolderBrowserDialog1.Description = "Укажите путь к папке с установленной игрой"
        GoTo 4
3:      'проверяем файл на существование и наличие пути
        If My.Computer.FileSystem.FileExists("Settings.dtx") Then
            Path = My.Computer.FileSystem.ReadAllText("Settings.dtx")
        Else : GoTo 1
        End If
        If Path = Nothing Then
            GoTo 1
        Else
            'загружаем путь из файла и указываем его как активный
            GamePath = My.Computer.FileSystem.ReadAllText("Settings.dtx")
            My.Computer.FileSystem.CurrentDirectory = GamePath
            'проверяем правильность пути, если не правильный просим указать
            GoTo 2
        End If
2:      'Проверка существования файла запуска игры и в случае отсутсивя диалог указания пути к файлу
4:      If My.Computer.FileSystem.FileExists("KF_launcher.exe") Then
            Me.Hide()
            procID = Shell("KF_launcher.exe", AppWinStyle.NormalFocus)
            'Me.Close()
        Else
            GoTo 3
1:          If FolderBrowserDialog1.ShowDialog = System.Windows.Forms.DialogResult.OK Then
                My.Computer.FileSystem.CurrentDirectory = FolderBrowserDialog1.SelectedPath
                If My.Computer.FileSystem.FileExists("KF_launcher.exe") Then
                    Me.Hide()
                    ' присвайваем переменной значение пути
                    GamePath = FolderBrowserDialog1.SelectedPath
                    procID = Shell("KF_launcher.exe", AppWinStyle.NormalFocus)
                    ' указываем папку с программой как активную
                    My.Computer.FileSystem.CurrentDirectory = SoursPath
                    ' записываем значение в файл
                    My.Computer.FileSystem.WriteAllText("Settings.dtx", GamePath, False)
                    'Me.Close()
                Else
                    MsgBox("Указан неверный путь", MsgBoxStyle.Information)
                    Me.Show()
                End If
            Else : Me.Show()
            End If
        End If
    End Sub
прошу вашей помощи в наведении порядка в этом коде =)
0
1669 / 1160 / 224
Регистрация: 23.12.2010
Сообщений: 1,504
22.11.2012, 12:33 4
Если у вас возникают ТАКИЕ вопросы:
Цитата Сообщение от chi100v Посмотреть сообщение
взят абсолютный путь к определенной папке хранящийся в RootFolder, мне же необходимо чтобы пользователь сам указывал путь к папке и этот путь сохранялся во внешнем файле.
Цитата Сообщение от chi100v Посмотреть сообщение
но теперь необходимо:
1) чтобы при первом запуске программы пользователь указал путь к папке с установленной игрой, также необходима проверка правильности указанного пути, сделать это можно по файлу запуска самой игры "KF_launcher.exe", при условии, что все условия выполнены путь сохраняется в файле "Settings.dtx" (и если такого файла нет, то он создается);
2) при последующих запусках программы производилась проверка наличия файла "KF_launcher.exe" в сохраненном в файле "Settings.dtx" пути, если же файл по указанному пути не найден или отсутствует файл "Settings.dtx" запускать пункт 1);
то до написания обновлялки (да и вообще до проектов более-менее серьезных) вы еще не дотягиваете.
Тут могу помочь только советом: качайте книжки по VB.net и читайте, читайте, читайте... Тогда и код из FAQa станет прозрачным.
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
23.11.2012, 02:02  [ТС] 5
Спасибо за ответ, но все же здесь я ждал чего-то более конкретного. Я не программист и не занимаюсь написанием каких бы то ни было программ, просто возникла необходимость (такое бывает у каждого), в силу периодичности таких ситуаций (а они крайне редки) тратить время на изучение специализированной литературы нет ни времени ни смысла, и раз уж моя затея не такой уж серьезный проект, то пришел на форум, в названии темы которого содержались следующие буквы "Форум Visual Basic .NET". Задал вопрос, предоставил некоторый код и попросил помощи, в ответ на это меня ткнули носом в мое незнание матчасти, дали напутствующий совет из серии "тебя что в гугле забанили?" и отпустили с миром. Отлично!
В голове у меня сложился алгоритм решения поставленных мною же вопросов, но реализовать сам не могу, потому и пришел за помощью на форум с которого меня посылают...
0
386 / 375 / 22
Регистрация: 08.02.2011
Сообщений: 1,078
23.11.2012, 07:39 6
А ты в курсе, что программы на Vb.net работают только при установленном net framework? А прикинь, если у геймера он не установлен на компе, твоя обнавлялка ему выдаст exception и все )
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
24.11.2012, 03:34  [ТС] 7
хорошее замечание, но этот вопрос уже решен, через "Публикацию" (использую Visual Studio Express 2012, галочками проставить необходимые для работы компоненты и вуаля, они сами скачаются и установятся)

Добавлено через 19 часов 42 минуты
так ну собсно вот все и готово, отлично работает, но теперь встал вопрос о размещении эталонного клиента игры (а это 3+ Гб), пока искал подходящее хранилище ко мне пришло понимание что реализовать такой процесс:
как это работает
1) нажатием на кнопку запускаем процесс скачивания.
2) загружается содержимое файла UpdateInfo.upd
3) формируется список OriginStrings путем порезки полученных данных на фрагменты
4) имея корневую локальную папку и получив из файла UpdateInfo.upd относительные пути к файлам, вычисляются хеши локально расположенных файлов. Проверяется совпадение полученных хешей и вычисленных. Если совпали - файл качать не надо. Если не совпали:
- файл (точнее, елемент списка) добавляется в список ResultStrings. Одновременно создаются необходимые пустые каталоги (смотрим на полученный относительный путь)
- теперь производится собственно закачка каждого файла из списка ResultStrings и его сохранение в нужном месте (корневой путь у нас задан, относительные мы получили)
5) В процессе закачки на форме отображается процесс закачки каждого файла с отображением также серверного пути и локального. Т.е. откуда и куда качаем. В заголовке формы работает счетчик, показывающий порядковый номер файла из списка и длину списка.

можно и через торрент, чтобы скачавшие становились источником, несколько снизить нагрузку с сервера, вот только примеров такой реализации не нашел.
Может у кого-то есть информация в такой области?
0
Pe4eNEG
24.11.2012, 11:02
  #8

Не по теме:

интересна коммерческая сторона вопроса, все это делается just for fun или у Вас имеется какой-то заказчик?

0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
24.11.2012, 13:09  [ТС] 9
делаю для себя, держу сервер игры Killing Floor. К сожалению не все игроки приобрели ее на Steam, многие (русские в основном) играют на пиратских версиях. Если обладатели лицензий без проблем получают обновления, то обладатели пираток частенько сталкиваются с трудностями, потому и решил сделать им жизнь попроще.
0
Pe4eNEG
26.11.2012, 15:50
  #10

Не по теме:

не так давно была распродажа могли бы и купить) что я и сделал кстати)

0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
26.11.2012, 16:01  [ТС] 11
ну я так то давно уже приобрел (иначе сервер держать сложновато в плане обновлений), и конечно замечательно общаться на отвлеченные темы, но может кто-нибудь лучше по делу материалы подкинет?
0
119 / 119 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
01.12.2012, 09:21 12
По моему самым простым вариантом будет создать раздачу установленной игры, а в момент обновления посылать сообщение о необходимости перехешировать торрент в свой лаунчер. Тогда торрент сам докачает недостающие части. По моему это будет намного разумнее чем начать писать свой торрент клиент.
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
01.12.2012, 10:39  [ТС] 13
есть примеры подобной реализации?
0
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 60
01.12.2012, 20:35 14
Попробуй сделать загрузку файлов по принципу md5 с реализацией значения .part
0
119 / 119 / 12
Регистрация: 12.06.2010
Сообщений: 499
Записей в блоге: 2
01.12.2012, 23:51 15
Цитата Сообщение от chi100v Посмотреть сообщение
есть примеры подобной реализации?
да какие тут примеры) находишь трекер, создаешь раздачу установленной килинг фло. .torrent файлы рассылаешь через форум который у тебя скорее всего есть, ну или любым удобным способом. А уж каким способом ты будешь сообщать об обновлении я не знаю хоть также через форум, хоть через лаунчер, хоть в аську стучать)
Пользователи, когда получают от тебя сообщение нажимают "стоп" в торрент клиенте после чего "перехишировать торрент" и докачивают недостающие файлы. Ну а если уж хочешь делать так как ты задумал, то я думаю ты не избежишь нагрузки на свой сервер из за постоянных скачиваний. (а так бы грузили чужой трекер )
0
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 22
02.12.2012, 02:39  [ТС] 16
понял тебя, уже рассматривался такой способ, но работающий несколько иначе. На сервер выкладывается торрент файл, лаунчер его скачивает и через uторрент запускает, и клиент скачивается, при обновлении клиента файл торрента заливается поновой и при запуске лаунчер проверяет md5 торрент файлов и в случае различий выкачивает новый и начинает его загрузку. Но отказался от этого способа т.к. он не сильно отличается от используемого на данный момент.
А насчет нагрузки на сервер при текущей схеме работы лаунчера, я не беспокоюсь, во-первых, файлы находятся не на моем сервере, а во-вторых, даже если они будут находится у меня, то всегда можно ограничить скорость отдачи.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2012, 02:39

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Лаунчер для игры + мониторинг
Здравствуйте Я зделал лаунчер для онлайн игры но мне нужно сделать мониторинг этой игры чтобы...

Лаунчер для online - игры
Есть одна игра Love Beat (Тайская Версия) и чтобы попасть игру,нужно залогинится на сайте игры. ...

Как сделать лаунчер для игры?
Делаю игру на unity. Вот хочу сейчас закинуть сырую бетку в интернет. Подскажите, как сделать к ней...

Лаунчер для игры + мониторинг + новости
Лаунчер для игры + мониторинг Здравствуйте Я зделал лаунчер для онлайн игры но мне нужно сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.