1 / 1 / 2
Регистрация: 26.03.2012
Сообщений: 88
1

Updater для Aion: разобратся с исходниками

26.03.2012, 18:14. Показов 3750. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер. Были у меня исходники одного updatera для Aion (mmorpg)
Переделал их немножко и т.д

И столкнулся с проблемой.
Само обновление происходит там таким методом.
Прошу прощения спойлера не нашел.
C#
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Windows.Forms;
using System.Net.Sockets;
 
namespace Aion_Launcher
{
    class Updater
    {
        string launchPath = Application.StartupPath;
        string[] lines;
 
        List<ClientFile> clientFiles = new List<ClientFile>();
 
        public UpdaterTemp temp;
 
        public void selfUpdate()
        {
            if (!Settings.launchUpdateEnabled)
                return;
 
            try
            {
                WebClient client = new WebClient();
                string actual = client.DownloadString(Settings.launchFilesUrl + "/version.txt");
                string current = Application.ProductVersion;
 
                if (!File.Exists("update.exe"))
                {
                    Uri ui = new Uri(Settings.launchFilesUrl + "/update.exe");
                    WebClient c = new WebClient();
                    c.DownloadFile(ui, launchPath + "\\update.exe");
                }
                if (!actual.Equals(current))
                {
                    Process.Start("update.exe");
                    Environment.Exit(0);
                }
            }
            catch { }
        }
 
        public void downloadHashes()
        {
            try
            {
                WebClient webClient = new WebClient();
                Uri ui = new Uri(Settings.clientUrl + "/hash.txt");
                webClient.DownloadFile(ui, launchPath + "\\hash.txt");
 
                lines = File.ReadAllLines(Application.StartupPath + "\\hash.txt");
                File.Delete(Application.StartupPath + "\\hash.txt");
            }
            catch
            {
                System.Windows.Forms.MessageBox.Show("Не удалось подключиться к серверу обновления.", "Внимание!");
            }
        }
 
        public void update()
        {
            downloadHashes();
 
            if (lines == null)
            {
                temp.button_play.Enabled = true;
                temp.button_update.Enabled = true;
                return;
            }
 
            foreach (String line in lines)
            {
                string[] fileInfo = line.Split(':');
                clientFiles.Add(new ClientFile(fileInfo[0], fileInfo[1]));
            }
 
            checkFolders(clientFiles);
 
            foreach (ClientFile clientFile in clientFiles)
            {
                string path = (launchPath + "\\" + clientFile.Name);
                bool exists = System.IO.File.Exists(path);
 
                if (!exists || isUpdateRequired(path, clientFile.Hash))
                {
                    temp.filesToUpdate++;
                    temp.filesRemains++;
                }
            }
 
            foreach (ClientFile clientFile in clientFiles)
            {
                string path = (launchPath + "\\" + clientFile.Name);
                bool exists = System.IO.File.Exists(path);
 
                if (!exists || isUpdateRequired(path, clientFile.Hash))
                {
                    downloadFile(clientFile.Name);
                }
            }
 
            temp.progressBar.Style = System.Windows.Forms.ProgressBarStyle.Marquee;
 
            if (temp.filesRemains == 0)
                temp.onUpdateEnd();
 
        }
 
        public void checkFolders(List<ClientFile> list)
        {
            foreach (ClientFile clientFile in list)
            {
                string filePath = (Application.StartupPath + "\\" + clientFile.Name);
                string[] patterns = filePath.Split('\\');
                int num = patterns.Length;
 
                if (num > 0)
                {
                    string path = Program.delLastpattern(filePath, '\\');
                    if (!System.IO.Directory.Exists(path))
                    {
                        System.IO.Directory.CreateDirectory(path);
                    }
                }
            }
        }
 
        public void downloadFile(string fileName)
        {
            try
            {
                WebClient web = new WebClient();
                Uri url = new Uri(Settings.clientUrl + fileName);
                web.DownloadFileCompleted += new AsyncCompletedEventHandler(temp.client_DownloadFileCompleted);
                web.DownloadFileAsync(url, launchPath + "\\" + fileName);
            }
            catch { }
        }
 
        public bool isUpdateRequired(string path, string hashcode)
        {
            FileInfo file = new FileInfo(path);
            string hash = Program.GetHashString(file.Length.ToString());
 
            if (!hash.Equals(hashcode))
                return true;
            else
                return false;
 
        }
 
    }
 
    class UpdaterTemp
    {
        public int filesToUpdate = 0;
        public int filesRemains = 0;
 
        public ProgressBar progressBar;
        public Label label;
 
        public Button button_play;
        public Button button_update;
 
        public UpdaterTemp(ProgressBar pb, Label label, Button button_play, Button button_update)
        {
            this.progressBar = pb;
            this.label = label;
            this.button_play = button_play;
            this.button_update = button_update;
        }
 
        public void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            filesRemains--;
            label.Text = "Осталось файлов: " + filesRemains;
 
            if (filesRemains == 0)
            {
                onUpdateEnd();
            }
 
        }
 
        public void onUpdateEnd()//Надо править для другого дийзайна начну с 26.03.12
        {
            button_play.Enabled = true;
            button_update.Enabled = true;
            label.Text = "Обновление завершено!";
            progressBar.Style = System.Windows.Forms.ProgressBarStyle.Continuous;
            progressBar.Value = 100;
        }
    }
}
Так вот. А настройки он сюда вызывает из файла настроек содержимае которого таково.
C#
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//
//Основной конфиг апдейтера
//
namespace Aion_Launcher
{
    class Settings
    {
 
 
        public static int gameseverPort         = 7777;
        public static int loginserverPort       = 2106;
 
        public static bool onlineEnabled        = false;
        public static bool newsEnabled          = false;
        public static bool launchUpdateEnabled  = false;
        public static bool deleteFilesEnabled   = false;// Опасная функция...Если не найдет bin32 то удалит все файлы в своей директории 
 
        public static string[] allowedFiles     = { "Aion Launcher.exe", "update.exe", "cc.ini", "Pub.key", "system.cfg" };
 
        public static string clientUrl          = "http://test.ru/updater/";
        public static string launchFilesUrl     = "http://test.ru/updater/";
        public static string onlineUrl          = "http://x.x.x.x/test/online.txt";
 
        public static string gameseverIP        = "127.0.0.1";
        public static string loginserverIP      = "127.0.0.1";
    }
}
Как можно увидеть из настроек .Я настроил это дело на danver для прверки. Создал папачку /updater/
А в нее поместил version.txt как сказано тут:
C#
1
string actual = client.DownloadString(Settings.launchFilesUrl + "/version.txt");
И запускаю программу , а она не запускается но иногда вылазит какойто bios updater??
Не запускается когда параметр устанавливаю на True
C#
1
public static bool launchUpdateEnabled  = false;
а иногда нет.

собственно что должно находится в файле version.txt
Точнее формат.Да и как убрать этот bios Updater
И просто скачивать файлы если в version.txt цифра больше чем у меня



Собственно что вам понятно из этого кода?)

Добавлено через 27 минут
если потребуется скину исходники других файлов этого проекта.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2012, 18:14
Ответы с готовыми решениями:

Написание программы для запуска файла игры Aion.exe
Доброго времени суток. Возник такой вопрос: есть всем известная игра Aion для которой понадобилось...

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

Куда в коде программы вставить код для автообновления (updater)
Вообщем есть код для автообновления (updater) но что и как делаь в теме не расписано, мои познания...

Aion и Windows 7
проблема в том ,после установки клиента и запуска --вылетает черный экран(((( вот такие вот дела ....

2
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
26.03.2012, 18:30 2
Цитата Сообщение от inclub Посмотреть сообщение
собственно что должно находится в файле version.txt
Точнее формат.
Обычный текстовый файл, находящийся на сервере обновления, в котором записана, судя по всему, номер новой версии программы.
0
1 / 1 / 2
Регистрация: 26.03.2012
Сообщений: 88
26.03.2012, 18:47  [ТС] 3
Цитата Сообщение от iprog Посмотреть сообщение
Обычный текстовый файл, находящийся на сервере обновления, в котором записана, судя по всему, номер новой версии программы.
Но почему то при включении обновлений тобиш
C#
1
public static bool launchUpdateEnabled  = [COLOR="Red"]true[/COLOR];
У меня либо вообще не запускается программа либо запускается какойто BiosUpdater
Если еще раз запустится скрин сделаю.

Зачеи вообще там нужно запускать update.exe
Вот он его запускает
C#
1
2
3
4
5
6
         if (!File.Exists("update.exe"))
                {
                    Uri ui = new Uri(Settings.launchFilesUrl + "/update.exe");
                    WebClient c = new WebClient();
                    c.DownloadFile(ui, launchPath + "\\update.exe");
                }
Добавлено через 10 минут
Попробовал скомпилировать запустилась. Только вот пишет мол Не удалось подключиться к серверу обновления.

Хотя заполнено все правильно.

Как можно подправить этот код? что бы при нажатии кнопки обновить он читал версию в файле version.txt сравнивал со своей и если старее качал и естественно обновлял свою версию в своем файле.(каком я так и не понел)
А качаться предпологается не 1 файл а несколько папок.В которых в свою очередь файлы. И точно так как скачал и сохранять.в те же папки заменяя. ( тоесть в свою директорию) так как предпологается что он будет находится в директории игры.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2012, 18:47
Помогаю со студенческими работами здесь

Мерцание текстур в Aion
У меня фигня какая то в айоне мерцают текстуры при этом подлагивает все началось с того что я...

Вопросы про игру Aion
всем доброго времени!парни подскажите игра aion как вообще кто нить гамал?и кстати она платная...

MMORPG что то типо AION
Парни у кого есть желание. Я собираюсь писать MMORPG что то типо AION ну тока поубогее понятное...

Updater c++
Мне нужно чтобы программа обновлялась с одной версии на другую. Например сейчас стоит первая версия...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru