Patcher Software (Illumina Design)

08/20/2016 17:00 MaxChri#1
Ich dachte mir, es muss mal ein neuer Patcher her - mit dem [Only registered and activated users can see links. Click Here To Register...] Design.

[Only registered and activated users can see links. Click Here To Register...]

Wie findet ihr den Aufbau bisher? Habt ihr ggf. noch Verbesserungsvorschläge oder Wünsche?
Ich verwende ausschließlich Elemente, welche im Obigen verlinkten Release einsehbar sind.

Chronologisch von links oben nach rechts unten besetzte Buttons: Homepage, Forum, Registrieren, Config, Client starten.


Patcher System:
- md5 / file size checkup
- optional: ignore md5 hashes of single files, empty file creator
- control strings are nameable
- internal system settings can be modified (ini)
08/20/2016 17:02 EasyFarm#2
Bockt :D
08/20/2016 17:13 ChaosTimes#3
Sieht schick aus! :)
08/21/2016 14:41 jubox123#4
1. In welcher Sprache ist er geschrieben ?
2. Wird der Source releast ?
3. Was macht den Patcher besonders ?

Quote:
Originally Posted by MaxChri View Post
Wie findet ihr den Aufbau bisher? Habt ihr ggf. noch Verbesserungsvorschläge oder Wünsche?
Ich denke mal, dass jeder sein eigenes Design benutzten möchte mit seinen eigenen Aufbau daher ist das eigentlich egal.
08/21/2016 18:19 MaxChri#5
Quote:
Originally Posted by jubox123 View Post
1. In welcher Sprache ist er geschrieben ?
2. Wird der Source releast ?
3. Was macht den Patcher besonders ?


Ich denke mal, dass jeder sein eigenes Design benutzten möchte mit seinen eigenen Aufbau daher ist das eigentlich egal.
1. Die Basis ist AutoIt, benutze aber eigene Systeme drauf.
2. Wird ein Closed Source mit Freeware Lizenz sein.
3. Die System Features stehen im Groben im Release.

Daher wollte ich gerne wissen, ob der Aufbau so i.O ist. :o

Sieht inzwischen so aus:
[Only registered and activated users can see links. Click Here To Register...]
08/21/2016 18:38 jubox123#6
Quote:
Originally Posted by MaxChri View Post
1. Die Basis ist AutoIt, benutze aber eigene Systeme drauf.
2. Wird ein Closed Source mit Freeware Lizenz sein.
3. Die System Features stehen im Groben im Release.

Daher wollte ich gerne wissen, ob der Aufbau so i.O ist. :o

Sieht inzwischen so aus:
[Only registered and activated users can see links. Click Here To Register...]
1. In AutoIt einen Patcher zu schreiben ist finde ich einfach verschwendete Zeit, dazu gibt es den von musicinstructor.
2. Ohne Source wird man damit dann noch weniger anfangen können.
3. Das sind eigentlich Features die Standard sind oder halt in ein paar Minuten erledigt sind.

Der Aufbau ist aber gar nicht mal so schlecht :p
08/21/2016 22:08 MaxChri#7
Quote:
Originally Posted by jubox123 View Post
1. In AutoIt einen Patcher zu schreiben ist finde ich einfach verschwendete Zeit, dazu gibt es den von musicinstructor.
2. Ohne Source wird man damit dann noch weniger anfangen können.
3. Das sind eigentlich Features die Standard sind oder halt in ein paar Minuten erledigt sind.

Der Aufbau ist aber gar nicht mal so schlecht :p
Wieso ist AutoIt Zeitverschwendung xD? Damit kann ich mehr anfangen,
als mit irgendwelchen objektorientieren F# Sprachen, wo man dann die
Buttons aus einer Liste wählt und sie in das GUI zieht (als ob ich retarded wäre).
Wie gesagt, ich benutze selbst entwickelte Control Systeme und eine game engine,
die wahrscheinlich besser ist, als Metin3. :handsdown:

Und ich frage mich, wofür man einen Source für den Patcher braucht.
Alle benötigten Optionen + Extras kann man in einer simplen
Textdatei vornehmen, ohne den Source zu studieren.
08/22/2016 00:10 King Sora#8
Ahoi! :)

Ich selbst habe schon mit dem Gedanken gespielt einen Patcher für mein Illumina Design anzufertigen. Was ich auch gemacht habe. Allerdings war ich bisher noch zu blöd um die Serialization der Patchlist hinzubekommen. Ok, zu dumm ist vielleicht nicht ganz richtig... Ich war bisher zu faul dazu.


Dein Patcher sieht ganz cool aus! :)
Meine Wünsche wären Multipatching und wenn du dich der Aufgabe gewachsen fühlst, dann würde ich mir Diff-Patching auch noch wünschen.

Ich danke dir vielmals, dass du meinen Thread verlinkt hast, sowas ist auch nicht selbstverständlich!!

Lg. Sora

08/22/2016 00:49 jubox123#9
Quote:
Originally Posted by MaxChri View Post
Wieso ist AutoIt Zeitverschwendung xD? Damit kann ich mehr anfangen,
als mit irgendwelchen objektorientieren F# Sprachen, wo man dann die
Buttons aus einer Liste wählt und sie in das GUI zieht (als ob ich retarded wäre).
Daran sieht man, dass du überhaupt keine Ahnung hast oder dich damit nicht richtig befasst hast.
Sora hat gezeigt wie es mit C# geht.

Quote:
Originally Posted by King Sora View Post
Ahoi! :)

Ich selbst habe schon mit dem Gedanken gespielt einen Patcher für mein Illumina Design anzufertigen. Was ich auch gemacht habe. Allerdings war ich bisher noch zu blöd um die Serialization der Patchlist hinzubekommen. Ok, zu dumm ist vielleicht nicht ganz richtig... Ich war bisher zu faul dazu.


Dein Patcher sieht ganz cool aus! :)
Meine Wünsche wären Multipatching und wenn du dich der Aufgabe gewachsen fühlst, dann würde ich mir Diff-Patching auch noch wünschen.

Ich danke dir vielmals, dass du meinen Thread verlinkt hast, sowas ist auch nicht selbstverständlich!!

Lg. Sora

Respekt, sowas war bestimmt nicht gerade einfach, spiele auch mit dem Gedanken mich ans Diff-Patching ran zu wagen.
Wäre nett wenn du vllt. den Aufbau und den Ablauf beschreibst.

Lg. Raiin
08/22/2016 20:53 MaxChri#10
Quote:
Originally Posted by King Sora View Post
Ahoi! :)

Ich selbst habe schon mit dem Gedanken gespielt einen Patcher für mein Illumina Design anzufertigen. Was ich auch gemacht habe. Allerdings war ich bisher noch zu blöd um die Serialization der Patchlist hinzubekommen. Ok, zu dumm ist vielleicht nicht ganz richtig... Ich war bisher zu faul dazu.


Dein Patcher sieht ganz cool aus! :)
Meine Wünsche wären Multipatching und wenn du dich der Aufgabe gewachsen fühlst, dann würde ich mir Diff-Patching auch noch wünschen.

Ich danke dir vielmals, dass du meinen Thread verlinkt hast, sowas ist auch nicht selbstverständlich!!

Lg. Sora

Hey :)

vielen Dank für deine Vorschläge. Ich werde einige Tests durchführen und analysieren,
inwiefern ich eine Verbesserung der sonst benötigten Patch-Zeit erzielen kann.

Quote:
Originally Posted by jubox123 View Post
Daran sieht man, dass du überhaupt keine Ahnung hast oder dich damit nicht richtig befasst hast.
Sora hat gezeigt wie es mit C# geht.
Mit Visual C# habe ich mich ausreichend befasst. Einige Lücken bzgl.
zur Syntax lassen mich öfters zum Nachlesen verleiten. Aber ansonsten
ganz nette und einfach zu verstehende Sprache. :o
08/25/2016 18:59 King Sora#11
Quote:
Originally Posted by jubox123 View Post
[...]
Respekt, sowas war bestimmt nicht gerade einfach, spiele auch mit dem Gedanken mich ans Diff-Patching ran zu wagen.
Wäre nett wenn du vllt. den Aufbau und den Ablauf beschreibst.

Lg. Raiin
Hoi!

Nachdem ich mir ein geeignetes Konzept ausgedacht habe, war die größte Schwierigkeit eigentlich überwunden. Das (richtige) Programmieren war dann halt die Detailarbeit.

Das Prinzip beim Diff-Patching ist wie folgt:

Ich habe ein Objekt, welches das zu aktualisierende File beschreibt, sprich alle Informationen wie Name, Größe, Hash etc. (Ja der Hash muss kein MD5 hash sein, sondern darf auch ein komplett anderer Hash sein, wie bsp. SHA1 o.Ä., die Hashfunktion kann man dank eines geeigneten Interfaces bei meinem Patcher selbst bestimmen oder sogar komplett selbst programmieren. Man muss im Patcher und in der Patchlist nur jeweils die selbe Hashfunktion benutzen, sollte aber klar sein.)

Jedenfalls sieht so das Objekt bzw. in meinem Fall die Struktur des zu aktualisierenden Files aus:
[Only registered and activated users can see links. Click Here To Register...]

Auffallend hierbei ist das DiffPatch Array. Das DiffPatch Objekt sieht aus wie folgt:
[Only registered and activated users can see links. Click Here To Register...]

So, in diesem DiffPatch Objekt sind 2. Member sehr wichtig, nämlich "_targetPatchFileHash" und "_sourcePath". Mit dem Member "targetPatchFileHash" spezifiziere ich den Hash der Datei, mit der dieser Diff Patch kompatibel ist. Mit dem Member "_sourcePath" spezifiziere ich den Downloadpfad des DiffPatches. Somit habe ich nun Quasie eine Verkettung: "Die Datei mit Hash XY ist mit Diff XY kompatibel."

Da in der Upadtefile Struktur das nun ein Array ist, kann man beliebig viele Verkettungen angeben, schließlich kann man niemals wissen wie weit die letzte Aktualisierung zurück liegt.

Mit dieser Liste in der Updatefile Struktur, kann der Patcher nun schauen ob es für das aktuelle File im Client einen DiffPatch gibt, falls ja, dann lade den Patch herunter und wende ihn an. Falls nicht, lade die komplette aktualisierte Datei herunter und ersetze die alte mit der neuen Datei.

[Only registered and activated users can see links. Click Here To Register...]

Hoffentlich habe ich deine Frage damit beantwortet...
Falls du noch etwas wissen möchtest, darfst du gerne fragen!

Lg. Sora

P.S.: Ja, mein Code ist zu 100% dokumentiert... (I hate this!)
08/25/2016 20:22 Yiv#12
Du hast ein Problem bei Dif-Patching: Wenn du eine Datei verschlüsselst und sich ein Byte ändert (uncrypted), ändert sich die komplette Datei, daher ist Dif-Patching hier sinnlos.

MfG
08/26/2016 14:06 MaxChri#13
90% sind fertig. :)

Habe jetzt die Patch Geschwindigkeit durch mehrere Cores (Multi-Patching) erhöht.
Habe noch gedacht, dass ich die Download Geschwindigkeit und verbleibende Zeit irgendwo anzeige. Habt ihr eventuell kreative Ideen, wie und wo :D ?

Btw. multi language wird wahrscheinlich auch noch drin sein (msgbox etc.).
08/26/2016 19:24 King Sora#14
Quote:
Originally Posted by Yiv View Post
Du hast ein Problem bei Dif-Patching: Wenn du eine Datei verschlüsselst und sich ein Byte ändert (uncrypted), ändert sich die komplette Datei, daher ist Dif-Patching hier sinnlos.

MfG
Hoihoi :)

Also ich habe damals Tests mit einem 2012 DE Client und einem 2012 P-Server Client durchgeführt, und jeweils den einen mit dem anderen überpatcht. Da sind wie gesagt diese 90% Zeitersparnis zusammengekommen.

Aber selbst wenn die Sache mit dem Verschlüsseln bei neueren Clients so ist, dank der Eventbasierten Programmierung des Patchers hat man genügend Optionen um den Patchvorgang zu optimieren.

Eine Lösung des Problems wäre, wenn man als Admin einen Diff-Patch der nicht verschlüsselten Datei erstellt. Der Patcher zieht sich dann den Diff-Patch und entschlüsselt die lokale Datei bevor dieser angewandt wird und verschlüsselt sie wieder nachdem er angewandt wurde. Das Funktioniert natürlich nur, wenn man die benötigte Ver und Entschlüsselungsroutine hat. (Egal in welcher Sprache, vorzugsweise C++ da man C# dekompilieren kann. Man kann nämlich in C# alles aufrufen, solange man eine geeignete API hat.)

Lg. Sora
08/26/2016 20:45 Yiv#15
Quote:
Originally Posted by King Sora View Post
Hoihoi :)

Also ich habe damals Tests mit einem 2012 DE Client und einem 2012 P-Server Client durchgeführt, und jeweils den einen mit dem anderen überpatcht. Da sind wie gesagt diese 90% Zeitersparnis zusammengekommen.

Aber selbst wenn die Sache mit dem Verschlüsseln bei neueren Clients so ist, dank der Eventbasierten Programmierung des Patchers hat man genügend Optionen um den Patchvorgang zu optimieren.

Eine Lösung des Problems wäre, wenn man als Admin einen Diff-Patch der nicht verschlüsselten Datei erstellt. Der Patcher zieht sich dann den Diff-Patch und entschlüsselt die lokale Datei bevor dieser angewandt wird und verschlüsselt sie wieder nachdem er angewandt wurde. Das Funktioniert natürlich nur, wenn man die benötigte Ver und Entschlüsselungsroutine hat. (Egal in welcher Sprache, vorzugsweise C++ da man C# dekompilieren kann. Man kann nämlich in C# alles aufrufen, solange man eine geeignete API hat.)

Lg. Sora
Nun, die alte Standard-Verschlüsselung hat aber auch lediglich die Index-File und nicht die Data-File verschlüsselt. Aktuell verbreitete Verschlüsselungen haben keine separate Index-File mehr und verschlüsseln das gesamte Archiv, daher funktioniert das Diff-Patching hier nicht mehr.
Mit der alten Standard-Verschlüsselung hingegen ist dein Diff-Patcher natürlich einwandfrei funktionsfähig :P

Zu deiner alternativen Lösung musst du dann jedoch aufpassen und halte ich auch nicht für besonders ideal, da im Endeffekt die Datei 1. unverschlüsselt auf dem Server liegt (bzw. die Diff-File, kommt nun auf den Patch an, ob man das will) und 2. muss sich dann der Patcher gegen diverse "Angriffe" schützen, damit man damit nicht ganz simpel den Client decrypten kann.

MfG