[How-TO]Richtigen Patcher Coden VB2010

04/15/2011 16:11 MiNdFrReAk#1
Heyho..

Nachdem ich solche sachen wie:

my.computer.network.download file.... What else.. geshen habe dachte ich
mich trift nen schlag.. Ehrlich jetz? So coded man natürlich keine Patcher (:

Ich zeig euch wie ihr einen inteligentern Patcher coded mit Versions
check.

Was brauchen wir (abgesehen von VB 2010):
2x Progressbar
1x Textbox
Und nen Label.. Nicht notwendig..

Zuerst:

Direkt unter dem "Public Class Form1"

Kommt die Deklaration

PHP Code:
Public WithEvents wb As New System.Net.WebClient 
Anschliesned klicken wir Doppelklick in Designer und kommen ins
Form1.load Event wo wir folgenden Code eintragen:

PHP Code:
wb.Proxy Nothing 
Zwischencheck:

PHP Code:
Public Class Form1
    
Public WithEvents wb As New System.Net.WebClient
    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load
        wb
.Proxy Nothing

    End Sub
End 
Class 
Als nächstes Lassen wir ihn die Version.txt runterladen.
Das kommt direkt darunter.

PHP Code:
        If My.Computer.Network.IsAvailable Then //Checkt ob Internet verfügbar ist
            
wb.DownloadFileAsync(new uri("LINK MIT DATEI BSP: http://hahaha.de/version.txt"), "SPEICHERNAME UND ORT BSP: "version.txt" ")
        
End If 
Dann gehen wir auf die Obere reiterleiste und suchen nach "wb"
(Für dummis: Das Ding wo oben "Form1 Ereignisse steht")
Und klickt das an.
Gleich daneben ist eine weiter leiste wo ihr dann folgendes sucht:
"DownloadprogressChanged"
Sobald ihr das gefunden habt, klickt ihrs an und gebt darin folgendes ein:

PHP Code:
ProgressBar1.Value e.ProgressPercentage 
Wer einwenig Englisch kann und mitdenkt, kann erraten was das bringen
soll. Jap! Es tut den Fortschritt auf die Progressbar1 Übertragen
Progressbar1.value heist soviel wie die % angabe
e.progresspercentage ist der fortschritt des downloads.

Sow.. Nun ladet er die Version runter und natürlich wollen wir das er die version dann auch liest wenn er sie heruntergeladen hat.
Dazu folgendes:
Ihr macht das gleiche wie oben nur diesmal klickt ihr auf "DownloadFileCompleted"

Dies bewirkt das der Code ausgeführt wird, sobald der Download abgeschlossen ist.
Der Code wird dann Das Lesen der Datei sein.

Diese lautet wie folgt.

PHP Code:
        Dim file As String
        file 
My.Computer.FileSystem.ReadAllText("version.txt"
Zwischencheck


So.. Nun hat der die Datei Version gedownloaded und gelesen & zwischen gespeichert.

Nun muss er prüfen ob Version.txt = Client nummer ist.
Das sinvollste wäre dann eine Einstellung zu machen
Dafür klickt ihr Doppelt auf My Project OBEN RECHTS.
Anschliesend öffnet sich ein Menü
Ihr geht auf Einstellungen und seht eine Tabelle.
Dort steht "Name" unten drunter steht "Setting"
Ihr ändert Setting in version und geht dann wieder raus.
NICHS Anderes ändern!

Dann wieder zurück ins Download Completed Handler
(Wo der Auslese Code ist...... ._.)
Und gibt folgenden Code ein:

PHP Code:
        If Not file My.Settings.version Then
            
//Das checkt ob Version.txt = version ist die im Client oder eher Patcher gespeichert ist.
            //Wenn nicht dann aktiviert sich der folgende code.
            //Hierbei wird dann der Eigendliche Patchvorgang gestartet.. Logisch?
        
End If 
Das nächste wird etwas komplizierter. Diesmal muss man wieder eine
Neue Public erstellen.
Machts wie ganz oben:

PHP Code:
Public WithEvents wb2 as new System.Net.Webclient 
Nun wieder zurück ins Download Completed Handler und dann
zwischen den If not... und End if kommt das rein:

PHP Code:
            wb.Proxy Nothing
            wb2
.DownloadFileAsync(New Uri("http://deinemama.com/locale_de,epk"), My.Computer.FileSystem.CurrentDirectory "\patch\" + "locale_de.epk") 
Müsste euch bekannt vorkommen?

Zwischencheck:

Nun ladet er die Datei locale runter und setz sie ins Patch verzeichniss.

Nun habt ihr die Grundbausteine Gelernt wie man einen Patcher baut.

Der nächste schritt wäre gewesen:

Geht wieder ganz nach oben und klickt diesmal wb2 an
dann wieder die leiste daneben und klickt "DownloadProgressChanged"
an und gibt das gleiche ein wie bei Version.txt

Dann wb3 erstellen für Root etc.

Schon arbeit so ein patcher oder?

Viel Spaß (:

MiNdFrReAk
04/15/2011 16:13 geldvernichter#2
nice gute arbeit
04/15/2011 16:28 xMichiix#3
super wär doch viel einfacher ween er eine datei auslesen täte und den ihnalt nach einnander downloadet:

Datei.txt:
123
1234
12345

Patcher ladent dann die dateien 123, 1234,12345 runter etc...
04/15/2011 16:32 Daroolein#4
Das ist kein HowTo wie man codet, sondern einfach der Sourcecode
von einem Patcher. Und falls es doch eines wäre, wäre es die falsche Sektion.
04/15/2011 17:08 MiNdFrReAk#5
Quote:
Originally Posted by Michi1994 View Post
super wär doch viel einfacher ween er eine datei auslesen täte und den ihnalt nach einnander downloadet:

Datei.txt:
123
1234
12345

Patcher ladent dann die dateien 123, 1234,12345 runter etc...
War eh nur ein Beispiel aber in deinem müsste schon eher mehr quelltext kommen.

Quote:
Originally Posted by TehDaroo View Post
Das ist kein HowTo wie man codet, sondern einfach der Sourcecode
von einem Patcher. Und falls es doch eines wäre, wäre es die falsche Sektion.
Ne Erklärung währe zutreffender (:
04/15/2011 17:32 3jfx#6
naja, ist doch immer noch n bisschen unschön ;)
04/15/2011 18:38 0x4D617276#7
falsche section wie daroo schon sagte
und sieht meiner source ziemlich ähnlich Oo
04/15/2011 18:47 banjo1#8
*moved
04/17/2011 22:34 Baratoik#9
Das ganze könntest du auch viel einfacher machen, indem du das die daten einer xml-Datei ausliest. SO wird nicht alles runter geladen, sondern nur das, was auch benötigt wird.

Werde dazu bald mal ein TUT schreiben
04/20/2011 02:11 mrapc#10
Naja Ich habs so gemacht:

Mein Patcher hat eine Liste der Datei die da sein sollten und wo sie sein sollten.
Er sucht diese ab, fehlt eine downloaded er diese und er downloaded standartmäßig immer die wichtigsten Datein...
05/03/2011 15:51 MiNdFrReAk#11
Quote:
Originally Posted by Baratoik View Post
Das ganze könntest du auch viel einfacher machen, indem du das die daten einer xml-Datei ausliest. SO wird nicht alles runter geladen, sondern nur das, was auch benötigt wird.

Werde dazu bald mal ein TUT schreiben
Ich hab doch nur ne Theorie erstellt.
Damit das ganze auch sinn macht brauchst du eine Version.txt
und eine Patch.txt
Die Version zeigt an welche Version du haben musst, wenn du diese Hast = Start
Wenn nicht = Patch.txt runter laden, dieser zeigt dir dann an welche herunter-
geladen werden müssen.

Wenn du das nur über Patch.txt machen würdest, würde das keinen Sinn machen weil er dann bei jedem starten immer dann die gleiche Datei runterläd.
Was wiederrum keinen Sinn macht.

Viel spaß beim Arbeiten eurer Logik!