Eine Art Patcher

  • Hi com,
    ich habe mir mal eine art patcher gescriptet, der soll in einer txt auslesen, was er prüfen soll was da ist, und wenn es nicht da ist downloadet er die datei von einem server.
    aus problemgründen musste ich den dateipfad mit / anfangen, sonst wird es zu kompliziert beim download.
    Hier mal das script:

    Spoiler anzeigen
    [autoit]

    ; Example for Patcher

    [/autoit] [autoit][/autoit] [autoit]

    $i = 0
    Do
    $i = $i + 1
    $file = FileReadLine("/list.txt", $i)
    If not $i - 1 = $file Then
    If not FileExists($file) Then
    InetGet("http://beispiel.pytalhost.com/download" & $file)
    MsgBox(0, "Fehler", $file & "konnte nicht gefunden werden." & @Crlf & "Der Download wird gestartet")
    Endif
    Endif
    Until $i - 1 = $file
    MsgBox(0, "Gut", "Alles Korrekt!!")

    [/autoit]


    er prüft nun die dateien, die in der list.txt stehen, bsp:
    legt dafür einen neuen ordner an mit:
    meinem script
    list.txt (was da rein soll schreib ich gleich)
    bsp.txt (inhalt egal)
    prüfen.txt (inhalt egal)

    in die list.txt schreibt ihr nun rein:
    /das script von mir.au3
    /list.txt
    /bsp.txt
    /prüfen.txt
    4

    4 -> ist die menge der zeilen ihr könnt das sicherlich aus dem script nachvollziehen

    wenn alles klappt kommt "alles korrekt!!" es sollte eigentlich alles klappen
    ihr könnt ja auch mal einen fehler einbauen, dann sollte da kommen, dass die fehlende datei downgeloadet wird, bei mir erscheint dies aber nicht.
    kann es sein, dass das script nach der if schleife einfach aufhört?
    ich verstehe das problem jedenfalls nicht
    ein paar gute ratschläge wären nett

  • generell würde ich dir empfehlen mit "ini-Dateien" zu arbeiten. dann sparst du dir die vielesn txt dateien.
    schau dir mal "iniwrite" und "iniread" an
    wenn du prüfen möchtest, ob du in eine if-schleife gelangst, setzte einfach eine msgbox hinein:
    MsgBox(0, "", "Hier bin ich")

  • Hallo black_scorpi,

    ich würde es so machen:

    Spoiler anzeigen
    [autoit]

    ; Example for Patcher
    #include <file.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $afile

    [/autoit] [autoit][/autoit] [autoit]

    If _FileReadToArray(@ScriptDir & "\list.txt",$afile) Then
    For $i = 1 To $afile[0]
    If Not FileExists(@ScriptDir & "\" & $afile[$i]) Then
    ;InetGet("http://beispiel.pytalhost.com/download/" & $afile[$i],@ScriptDir & "\" & $afile[$i],1,1)
    MsgBox(0, "Fehler", @ScriptDir & "\" & $afile[$i] & "konnte nicht gefunden werden." & @CRLF & "Der Download wird gestartet")
    EndIf
    Next
    EndIf
    MsgBox(0, "Gut", "Alles Korrekt!!")

    [/autoit]

    Edit: und so sieht dann die list,txt aus:

    Code
    das script von mir.au3
    list.txt
    bsp.txt
    prüfen.txt

    mfg (Auto)Bert

  • Hallo black_skorpi,

    einzige Beschränkungen: max. Größe der list.txt (wie bei dir auch) und max. Einträge in einem Array.
    so sieht die list.txt aus:

    Code
    das script von mir.au3
    list.txt
    bsp.txt
    prüfen.txt

    wenn die Dateien nicht in @scriptdir liegen msst du natürlich anpassen,

    mfg (Auto)Bert

  • naja es sind dann letzendlich 500 bis keine ahnung wie viele dateien, eigentlich bleibt es bei knapp 500
    also ich versuch mal das script von dir n bissle zu durchblicken und es dann anzupassen
    wenn der patcher fertig ist lad ich ihn vllt ja mal hoch ^^
    ich werde das dann auch iwan noch mit size ergänzen so is das natürlich net so doll^^

    danke für deine hilfe

  • hier mal ein ganz einfaches beispiel

    [autoit]


    $zeilen = 100
    dim $inhalt[$zeilen]
    for $i = 0 to $zeilen-1 step 1
    $inhalt[$i]=FileReadLine(@ScriptDir&'\',$i)
    next

    [/autoit]


    aber wenn du das ganze patchen möchtest, muss das skript doch auf dem server schauen, ob updates verfügbar sind oder?
    würd das so machen:

    [autoit]

    $read = StringSplit(_INetGetSource("http://....txt",@CR)

    [/autoit]
  • [autoit]

    #include <Array.au3>
    _ArrayDisplay($read)
    _ArrayDisplay($inhalt)

    [/autoit]


    und damit kannst du dann sehen, was in deinem array steht.

  • wie versprochen hier die zusammenfassung:

    [autoit]

    InetGet("http://beispiel.pytalhost.com/download/list.txt", ".\list.txt")
    #include <file.au3>
    Global $afile
    If _FileReadToArray(@ScriptDir & ".\" & "list.txt",$afile) Then
    For $i = 1 To $afile[0]
    If Not FileExists(@ScriptDir & "\" & $afile[$i]) Then
    InetGet("http://beispiel.pytalhost.com/download/" & $afile[$i],@ScriptDir & "\" & $afile[$i],1,1)
    EndIf
    Next
    EndIf

    [/autoit]


    ich hoffe das ichs jetzt richtig zusammengefasst habe, sonst korregiert mich!

  • Hallo black_skorpi,

    sieht gut aus.

    Diese Zeile

    [autoit]

    InetGet("http://beispiel.pytalhost.com/download/" & $afile[$i],@ScriptDir & "\" & $afile[$i],1,1)

    [/autoit]

    könnte unterumständen bei einer grösseren Menge an Files Probleme bereiten, da alle Downloads im Background gestartet werden, das könnte dazu führen dass dein INet das laggen anfängt da ja nicht gewartet wird bis ein Download beendet wird, sondern sofort (beim nächsten Schleifendurchlauf) der nächste gestartet wird. (Ja, ich weis sie ist aus meinem Vorschlag, aber da wusste ich ja noch nicht, dass du ca. 500 Files downloaden möchtest.)Einfach ausprobieren und evtl. den Background-Modus ausschalten,

    mfg (Auto)Bert

  • das habe ich auch schon gemerkt... naja eben grade... wie geht das denn?? habe schon vieles probiert.
    außerdem bin ich grade dabei, einen sizechecker einzubauen, wen vorschläge hat... bitte posten!
    ich amch den Thread wieder auf offen, da ja noch viele sachen geklärt werden müssen
    danke für den hinweiß aber wie gesagt ich merkte es schon -.-

  • wie jetzt?? die daten meiner onlineseite, damit ihr das dann testen könnt?
    könnte ich machen, gib mir bitte erst eine antwort will nicht sinnlos meine seite preisgeben ^^

    Du kannst doch in einem abgesoderten und gesicherten Bereich die List.txt und ein paar Testfiles einstellen
    hier ein Skript mit Progressbars für Anzahl der downgeloadeten Dateien und Bytes:

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('MustDeclareVars', 1)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $label1, $label2, $progressbar1, $progressbar2, $button, $wait, $s, $msg, $m, $afile, $aData
    Local $iSize, $iCount, $iBytesDone, $iFilesDone, $iPercent, $iDown

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("Updater", 220, 140, 100, 200)
    $label1 = GUICtrlCreateLabel("Dateien", 10, 8, 200, 16)
    $progressbar1 = GUICtrlCreateProgress(10, 25, 200, 20)
    GUICtrlSetColor(-1, 32250); not working with Windows XP Style
    $label2 = GUICtrlCreateLabel("Bytes", 10, 58, 200, 16)
    $progressbar2 = GUICtrlCreateProgress(10, 75, 200, 20, $PBS_SMOOTH)
    $button = GUICtrlCreateButton("Be&enden", 75, 115, 70, 20)
    GUISetState()
    If InetGet("http://beispiel.pytalhost.com/download/list.txt", @ScriptDir & "\list.txt", 1) > 0 Then
    If _FileReadToArray(@ScriptDir & ".\" & "list.txt", $afile) Then
    ;Schleife für Gesamtgröße und Anzahl der Files
    For $i = 1 To $afile[0]
    If Not FileExists(@ScriptDir & "\" & $afile[$i]) Then
    $iSize += InetGetSize("http://beispiel.pytalhost.com/download/" & $afile[$i], 1)
    $iCount += 1
    EndIf
    Next
    GUICtrlSetData($label1, "0/" & $iCount & " Dateien")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $afile[0]
    If Not FileExists(@ScriptDir & "\" & $afile[$i]) Then
    $iDown = InetGet("http://beispiel.pytalhost.com/download/" & $afile[$i], @ScriptDir & "\" & $afile[$i], 1)
    $iFilesDone += 1
    $iPercent = $iFilesDone / $iCount * 100
    GUICtrlSetData($progressbar1, $iPercent)
    GUICtrlSetData($label1, $iFilesDone & "/" & $iCount & " Dateien")
    $iBytesDone += $iDown
    $iPercent = $iBytesDone / $iSize * 100
    GUICtrlSetData($progressbar2, $iPercent)
    GUICtrlSetData($label2, $iBytesDone & "/" & $iSize & " Bytes")
    EndIf
    Next
    EndIf
    Else
    MsgBox(16, "Fehler", "Updateliste nicht gefunden!")
    EndIf
    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    mfg (Auto)Bert

  • wow danke ;)
    funktioniert aber irgentwie noch nicht richtig, ach ja hier mal meine adresse:
    mmorpgaming.pytalhost.com/autoit/
    für euch eingerichtet ;)
    das mit den bytes hatte ich auch schon lange -.- naja egal... das hilft mir sehr weiter, ich hoffe ich kann euch auch mal helfen...
    wenn ihr mal probleme habt könnt ihr auch gerne mich fragen ich weiß immerhin auch einiges ^^

  • Hallo

    wow danke ;)
    funktioniert aber irgentwie noch nicht richtig, ach ja hier mal meine adresse:
    mmorpgaming.pytalhost.com/aotuit/
    für euch eingerichtet ;)
    das mit den bytes hatte ich auch schon lange -.- naja egal... das hilft mir sehr weiter, ich hoffe ich kann euch auch mal helfen...
    wenn ihr mal probleme habt könnt ihr auch gerne mich fragen ich weiß immerhin auch einiges ^^

    immer wieder gerne, wenn es läuft (ich konnte es ja nicht austesten) setzt das Thema bitte auf gelöst,

    Edit, zu früh gefreut, da hast du zwischen meinem Lesen und Posten (ohne nochmaliges Lesen) wohl editiert. Ich schau es mir nochmal an,

    Edit2: wenn ich darf:

    Zitat

    403 - Fehler: Zugriff verweigert.

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (19. März 2010 um 14:39)