If Argumente werden übersprungen

  • He Leute, ich muss euch mal wieder mit Kleinigkeiten nerven. (Warum gibt es kein Forum für Schnellhilfe?)
    Ich habe jetzt hier meinen Code, aber irgendwie übersspringt er die Argumente in den If's und wiederholt einfach den ganzen Mist obwohl das rein Codetechnisch gesehen gar nicht möglich ist.
    Das ist ein bischen schwierig zu erklären, seht es euch einfach selber mal an.
    (ich habe manchmal MsgBoxen eingebaut damit man sieht, wo der Code gerade ist.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <FTPex.au3>
    $folder = "minesynctestserver"
    Global $possible = 1
    Global $disabled = 0
    Global $status = "ready"
    Global $newstatus = 1
    Global $serveron = 0
    Global $worldname = "world"
    Global $FTPUser = 'minesync', $FTPPass = '##########', $FTPServer = 'minesync.bplaced.de'
    $Minesync = GUICreate("Minesync", 428, 195, 209, 134,$WS_CAPTION)
    $Label1 = GUICtrlCreateLabel("Lädt Minesync...", 24, 8, 358, 52)
    GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Abbrechen", 8, 64, 401, 121, $WS_GROUP)
    GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1
    Exit
    EndSwitch
    if $possible = 0 Then
    if $disabled = 0 Then
    GUICtrlSetState($Button1,$GUI_DISABLE)
    $disabled = 1
    EndIf
    ElseIf $possible = 1 Then
    if $disabled = 1 Then
    GUICtrlSetState($Button1,$GUI_ENABLE)
    $disabled = 0
    EndIf
    EndIf
    if $newstatus = 1 Then
    if $status = "checkversion" or "waitcancel" Then
    GUICtrlSetData($Label1,"Überprüfe Version...")
    $newstatus = 0
    Elseif $status = "sync" Then
    GUICtrlSetData($Label1,"Synchronisieren...")
    $newstatus = 0
    EndIf
    EndIf
    if $status = "ready" Then
    $status = "checkversion"
    ElseIf $status = "checkversion" Then
    GUICtrlSetState($Button1,$GUI_DISABLE)
    Global $file = 'serverversion.ini'
    Global $ziel = @TempDir & "\serverversion.ini"
    Global $hFTPOpen = _FTP_Open('FTP Control')
    Global $hFTPConn = _FTP_Connect($hFTPOpen,$FTPServer, $FTPUser, $FTPPass)
    _FTP_FileGet($hFTPConn,$file,$ziel,True)
    $versionserver = IniRead(@TempDir & "\serverversion.ini","server","version","notfound")
    $versionclient = IniRead("thisversion.ini","server","version","notfound")
    if $versionclient = "notfound" or $versionserver = "notfound" Then
    MsgBox(48,"FEHLER","ini fehlerhaft, versionsabgleich, serverversion.ini:" & $versionserver & ",thisversion.ini" & $versionclient)
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    if $versionclient < $versionserver Then
    GUICtrlSetState($Button1,$GUI_ENABLE)
    $status = "waitcancel"
    $canceltimer = TimerInit()
    ElseIf $versionclient > $versionserver Then
    MsgBox(48,"FEHLER","Die Version im Client ist neuer als die im Server, das heißt der Upload wurde abgebrochen")
    _FTP_Close($hFTPOpen)
    Exit
    ElseIf $versionclient = $versionclient Then
    $status = "startserver"
    EndIf
    ElseIf $status = "waitcancel" Then
    if $canceltimer > 3000 Then
    $status = "sync"
    $possible = 0
    EndIf
    ElseIf $status = "startserver" Then
    MsgBox(0,"TEST","Das passiert, wenn die versionen übereinstimmen!")
    _FTP_Close($hFTPOpen)
    Exit
    ElseIf $status = "sync" Then
    MsgBox(0,"TEST","Hier kommt dann die Synchronisation hin")
    $file = 'serverstate.ini'
    $ziel = @TempDir & "\serverstate.ini"
    _FTP_FileGet($hFTPConn,$file,$ziel,True)
    $runninggrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serverrunninggrusim","notfound")
    $syncgrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serversyncgrusim","notfound")
    MsgBox(0,"Passed","Get passed")
    If $runninggrusim = "notfound" or $syncgrusim = "notfound" Then
    MsgBox(48,"FEHLER","ini fehlerhaft")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    If $runninggrusim = 1 Then
    $iMsgBoxAnswer = MsgBox(292,"WARNUNG","Der Server auf dem anderen Computer läuft noch, möchten sie ihn beenden?")
    Select
    Case $iMsgBoxAnswer = 6
    GUICtrlSetData($Label1,"Synchronisieren...")
    IniWrite($ziel,"serverstatus","pleaseclosegrusim",1)
    $succ = _FTP_FilePut($hFTPConn,$ziel,$file)
    if $succ = 0 Then
    MsgBox(48,"FEHLER","Es ist ein Fehler beim Upload aufgetreten: serverstatus.ini")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    while 1
    GUICtrlSetData($Label1,"Warte auf PC2...")
    sleep(1000)
    _FTP_FileGet($hFTPConn,$file,$ziel,True)
    $runninggrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serverrunninggrusim","notfound")
    $syncgrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serversyncgrusim","notfound")
    $requestgrusim = IniRead (@TempDir & "\serverstate.ini","serverstatus","pleaseclosegrusim","notfound")
    if $runninggrusim = "notfound" or $syncgrusim = "notfound" or $requestgrusim = "notfound" Then
    MsgBox(48,"FEHLER","Ein Fehler ist aufgetreten: serverstate.ini invalid")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    if $runninggrusim = 1 and $requestgrusim = 0 Then
    MsgBox(48,"FEHLER","Der andere Nutzer hat das beenden abgelehnt.")
    _FTP_Close($hFTPConn)
    Exit
    ElseIf $runninggrusim = 0 and $syncgrusim = 0 Then
    Call("Download")
    Endif
    Wend
    Case $iMsgBoxAnswer = 7
    MsgBox(64,"Abbruch durch Nutzer","Vorgang abgebrochen")
    _FTP_Close($hFTPOpen)
    Exit
    EndSelect
    EndIf
    ElseIf $syncgrusim = 1 Then
    MsgBox(64,"Vorgang abgebrochen","Der andere Computer synchronisiert gerade noch, bitte versuchen sie es später erneut")
    _FTP_Close($hFTPOpen)
    Exit
    Else
    MsgBox(0,"Download über Else","")
    Call("Download")
    EndIf
    WEnd
    Func Download()
    GUICtrlSetData($Label1,"Synchronisieren...")
    DirCopy($folder & "\" & $worldname,$folder & "\" & $worldname & "_backup",1)
    DirCopy($folder & "\" & $worldname & "_nether",$folder & "\" & $worldname & "_nether" & "_backup",1)
    DirCopy($folder & "\" & $worldname & "_the_end",$folder & "\" & $worldname & "_the_end" & "_backup",1)
    MsgBox(0,"TEST","ENDE")
    Exit
    Return
    EndFunc

    [/autoit]


    Ini Dateien:

    Spoiler anzeigen

    serverversion.ini (auf ftp server):

    Code
    [server]
    version=2


    thisversion.ini (clientversion):

    Code
    [server]
    version=1


    serverstate.ini (auf ftp server)

    Code
    [serverstatus]
    serverrunningfliwatt=0
    serverrunninggrusim=0
    serversyncgrusim=0
    serversyncfliwatt=0
    pleaseclosefliwatt=0
    pleaseclosegrusim=0


    Ich habe bei allen Dateien auf Groß-und-Kleinschreibung geachtet.


    Ich hoffe ihr könnt mir (wie sonst immer) weiterhelfen. :thumbup:
    Mfg Fliwatt

  • Das EndIf in Zeile 130 ist an der falschen Stelle, das sollte erst nach dem Call kommen, dann sollte es gehn.
    Hier bietet es sich wirklich an Switch zu verwenden...
    Ich hab ma versucht den Code ein bisschen aufzuräumen ohne jetzt was am Programmablauf zu ändern:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <FTPex.au3>
    $folder = "minesynctestserver"
    Global $possible = 1
    Global $disabled = 0
    Global $status = "ready"
    Global $newstatus = 1
    Global $serveron = 0
    Global $worldname = "world"
    Global $FTPUser = 'minesync', $FTPPass = '##########', $FTPServer = 'minesync.bplaced.de'
    $Minesync = GUICreate("Minesync", 428, 195, 209, 134,$WS_CAPTION)
    $Label1 = GUICtrlCreateLabel("Lädt Minesync...", 24, 8, 358, 52)
    GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Abbrechen", 8, 64, 401, 121, $WS_GROUP)
    GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    While 1
    If GUIGetMsg() = $Button1 Then Exit ; Verkürzt
    if $possible = 0 And $disabled = 0 Then ; Logische Verknüpfung
    GUICtrlSetState($Button1,$GUI_DISABLE)
    $disabled = 1
    ElseIf $possible = 1 And $disabled = 1 Then
    GUICtrlSetState($Button1,$GUI_ENABLE)
    $disabled = 0
    EndIf
    if $newstatus = 1 Then
    if $status = "checkversion" Or $status = "waitcancel" Then ; Hier wurde das '$status =' vergessen
    GUICtrlSetData($Label1,"Überprüfe Version...")
    $newstatus = 0
    Elseif $status = "sync" Then
    GUICtrlSetData($Label1,"Synchronisieren...")
    $newstatus = 0
    EndIf
    EndIf
    Switch $status ; Hier ist Switch relativ sinnvoll
    Case "ready"
    $status = "checkversion"
    Case "checkversion"
    GUICtrlSetState($Button1,$GUI_DISABLE)
    Global $file = 'serverversion.ini'
    Global $ziel = @TempDir & "\serverversion.ini"
    Global $hFTPOpen = _FTP_Open('FTP Control')
    Global $hFTPConn = _FTP_Connect($hFTPOpen,$FTPServer, $FTPUser, $FTPPass)
    _FTP_FileGet($hFTPConn,$file,$ziel,True)
    $versionserver = IniRead(@TempDir & "\serverversion.ini","server","version","notfound")
    $versionclient = IniRead("thisversion.ini","server","version","notfound")
    if $versionclient = "notfound" or $versionserver = "notfound" Then
    MsgBox(48,"FEHLER","ini fehlerhaft, versionsabgleich, serverversion.ini:" & $versionserver & ",thisversion.ini" & $versionclient)
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    if $versionclient < $versionserver Then
    GUICtrlSetState($Button1,$GUI_ENABLE)
    $status = "waitcancel"
    $canceltimer = TimerInit()
    ElseIf $versionclient > $versionserver Then
    MsgBox(48,"FEHLER","Die Version im Client ist neuer als die im Server, das heißt der Upload wurde abgebrochen")
    _FTP_Close($hFTPOpen)
    Exit
    ElseIf $versionclient = $versionclient Then
    $status = "startserver"
    EndIf
    Case "waitcancel"
    if $canceltimer > 3000 Then
    $status = "sync"
    $possible = 0
    EndIf
    Case "startserver"
    MsgBox(0,"TEST","Das passiert, wenn die versionen übereinstimmen!")
    _FTP_Close($hFTPOpen)
    Exit
    Case "sync"
    MsgBox(0,"TEST","Hier kommt dann die Synchronisation hin")
    $file = 'serverstate.ini'
    $ziel = @TempDir & "\serverstate.ini"
    _FTP_FileGet($hFTPConn,$file,$ziel,True)
    $runninggrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serverrunninggrusim","notfound")
    $syncgrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serversyncgrusim","notfound")
    MsgBox(0,"Passed","Get passed")
    If $runninggrusim = "notfound" or $syncgrusim = "notfound" Then
    MsgBox(48,"FEHLER","ini fehlerhaft")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    If $runninggrusim = 1 Then
    Switch MsgBox(292,"WARNUNG","Der Server auf dem anderen Computer läuft noch, möchten sie ihn beenden?")
    Case 6
    GUICtrlSetData($Label1,"Synchronisieren...")
    IniWrite($ziel,"serverstatus","pleaseclosegrusim",1)
    $succ = _FTP_FilePut($hFTPConn,$ziel,$file)
    if $succ = 0 Then
    MsgBox(48,"FEHLER","Es ist ein Fehler beim Upload aufgetreten: serverstatus.ini")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    while 1
    GUICtrlSetData($Label1,"Warte auf PC2...")
    sleep(1000)
    _FTP_FileGet($hFTPConn,$file,$ziel,True)
    $runninggrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serverrunninggrusim","notfound")
    $syncgrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serversyncgrusim","notfound")
    $requestgrusim = IniRead (@TempDir & "\serverstate.ini","serverstatus","pleaseclosegrusim","notfound")
    if $runninggrusim = "notfound" or $syncgrusim = "notfound" or $requestgrusim = "notfound" Then
    MsgBox(48,"FEHLER","Ein Fehler ist aufgetreten: serverstate.ini invalid")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    if $runninggrusim = 1 and $requestgrusim = 0 Then
    MsgBox(48,"FEHLER","Der andere Nutzer hat das beenden abgelehnt.")
    _FTP_Close($hFTPConn)
    Exit
    ElseIf $runninggrusim = 0 and $syncgrusim = 0 Then
    Call("Download")
    Endif
    Wend
    Case 7
    MsgBox(64,"Abbruch durch Nutzer","Vorgang abgebrochen")
    _FTP_Close($hFTPOpen)
    Exit
    EndSwitch
    ElseIf $syncgrusim = 1 Then
    MsgBox(64,"Vorgang abgebrochen","Der andere Computer synchronisiert gerade noch, bitte versuchen sie es später erneut")
    _FTP_Close($hFTPOpen)
    Exit
    Else
    MsgBox(0,"Download über Else","")
    Download()
    EndIf ; <- war davor an der falschen Stelle
    EndSwitch
    WEnd
    Func Download()
    GUICtrlSetData($Label1,"Synchronisieren...")
    DirCopy($folder & "\" & $worldname,$folder & "\" & $worldname & "_backup",1)
    DirCopy($folder & "\" & $worldname & "_nether",$folder & "\" & $worldname & "_nether" & "_backup",1)
    DirCopy($folder & "\" & $worldname & "_the_end",$folder & "\" & $worldname & "_the_end" & "_backup",1)
    MsgBox(0,"TEST","ENDE")
    Exit
    Return
    EndFunc

    [/autoit]


    (Nur auf Syntax gecheckt...)