FTP Server trennt Verbindung

  • He Leute,
    ich habe wieder ein Problem und zwar trennt der FTP Server mit der Zeit die Verbindung, das ist vorher nicht passiert, erst als ich eine ProgressBar eingebaut habe.
    Script:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <FTPEx.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    $foldername = "minesynctestserver"
    $folder = @ScriptDir & "\" & $foldername
    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", 404, 220, 206, 134)
    $Label1 = GUICtrlCreateLabel("Lade Minesync...", 16, 8, 358, 52)
    GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Abbrechen", 0, 64, 401, 121, $WS_GROUP)
    GUICtrlSetFont(-1, 30, 400, 0, "MS Sans Serif")
    $Progress1 = GUICtrlCreateProgress(0, 184, 401, 33)
    GUISetState(@SW_SHOW)
    While 1
    If GUIGetMsg() = $Button1 Then Exit
    if $possible = 0 And $disabled = 0 Then
    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
    GUICtrlSetData($Label1,"Überprüfe Version...")
    $newstatus = 0
    Elseif $status = "sync" Then
    GUICtrlSetData($Label1,"Synchronisieren...")
    $newstatus = 0
    EndIf
    EndIf
    Switch $status
    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)
    GUICtrlSetData($Progress1,2)
    $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 CODE:1","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 CODE:2","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)
    $runninggrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serverrunninggrusim","notfound")
    $syncgrusim = IniRead(@TempDir & "\serverstate.ini","serverstatus","serversyncgrusim","notfound")
    GUICtrlSetData($Progress1,5)
    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: 3","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)
    $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: 4","Ein Fehler ist aufgetreten: serverstate.ini invalid")
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    if $runninggrusim = 1 and $requestgrusim = 0 Then
    MsgBox(48,"FEHLER: 5","Der andere Nutzer hat das beenden abgelehnt.")
    _FTP_Close($hFTPConn)
    Exit
    ElseIf $runninggrusim = 0 and $syncgrusim = 0 Then
    Call("Download")
    Call("start")
    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")
    Call("Download")
    Call ("start")
    EndIf
    EndSwitch
    WEnd
    Func Download()
    GuiCtrlSetData($Progress1,10)
    Local $aResult[1]
    Local $sLocal = $folder & "\" ;<======= anpassen Pfad in dem die heruntergeladenen Dateien gespeichert werden
    Local $s_LocalFile
    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)
    _FTP_FileList_Rekursiv($aResult, "/" & $worldname & "/")
    If $aResult[0] > 0 Then
    For $i = 1 To $aResult[0]
    $s_LocalFile = $sLocal & "\" & StringTrimLeft($aResult[$i], 1)
    $s_LocalFile = StringReplace($s_LocalFile, "/", "\")
    _createLocalDirIfNecessary($s_LocalFile)
    ConsoleWrite("Download: " & $aResult[$i] & @TAB)
    ;#cs
    If _FTP_FileGet($hFTPConn, $aResult[$i], $s_LocalFile) Then
    ConsoleWrite("erfolgreich ")
    Else
    ConsoleWrite("fehlgeschlagen " & @error)
    EndIf
    ;#ce
    ConsoleWrite(@CRLF)
    Next
    Else
    MsgBox(48,"FEHLER","Keine Dateien zum Herunterladen gefunden" & @CRLF)
    _FTP_Close($hFTPOpen)
    Exit
    EndIf
    MsgBox(0,"TEST","Finnisch mit normal")
    GUICtrlSetData($Progress1,30)
    Local $aResult[1]
    Local $sLocal = @ScriptDir & "\" & $folder & "\"
    Local $s_LocalFile = ""
    _FTP_FileList_Rekursiv($aResult, "/" & $worldname & "_nether" & "/")
    If $aResult[0] > 0 Then
    For $i = 1 To $aResult[0]
    $s_LocalFile = $sLocal & "\" & StringTrimLeft($aResult[$i], 1)
    $s_LocalFile = StringReplace($s_LocalFile, "/", "\")
    _createLocalDirIfNecessary($s_LocalFile)
    ConsoleWrite("Download: " & $aResult[$i] & @TAB)
    ;#cs
    If _FTP_FileGet($hFTPConn, $aResult[$i], $s_LocalFile) Then
    ConsoleWrite("erfolgreich ")
    Else
    ConsoleWrite("fehlgeschlagen " & @error)
    EndIf
    ;#ce
    ConsoleWrite(@CRLF)
    Next
    Else
    MsgBox(48,"FEHLER","Keine Dateien zum Herunterladen gefunden" & @CRLF)
    EndIf
    MsgBox(0,"TEST","Finnisch mit Nether")
    GUICtrlSetData($Progress1,60)
    Local $aResult[1]
    Local $sLocal = @ScriptDir & "\" & $folder & "\"
    Local $s_LocalFile = ""
    _FTP_FileList_Rekursiv($aResult, "/" & $worldname & "_the_end" & "/")
    If $aResult[0] > 0 Then
    For $i = 1 To $aResult[0]
    $s_LocalFile = $sLocal & "\" & StringTrimLeft($aResult[$i], 1)
    $s_LocalFile = StringReplace($s_LocalFile, "/", "\")
    _createLocalDirIfNecessary($s_LocalFile)
    ConsoleWrite("Download: " & $aResult[$i] & @TAB)
    ;#cs
    If _FTP_FileGet($hFTPConn, $aResult[$i], $s_LocalFile) Then
    ConsoleWrite("erfolgreich ")
    Else
    ConsoleWrite("fehlgeschlagen " & @error)
    EndIf
    ;#ce
    ConsoleWrite(@CRLF)
    Next
    Else
    MsgBox(48,"FEHLER","Keine Dateien zum Herunterladen gefunden" & @CRLF)
    EndIf
    MsgBox(0,"TEST","Finnisch mit The Ende")
    GUICtrlSetData($Progress1,90)
    $file = 'craftbukkit.jar'
    $ziel = $folder & "\craftbukkit.jar"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,91)
    $file = 'banned-ips.txt'
    $ziel = $folder & "\banned-ips.txt"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,92)
    $file = 'banned-players.txt'
    $ziel = $folder & "\banned.ips.txt"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,93)
    $file = 'bukkit.yml'
    $ziel = $folder & "\bukkit.yml"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,94)
    $file = 'help.yml'
    $ziel = $folder & "help.yml"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,95)
    $file = 'ops.txt'
    $ziel = $folder & "ops.txt"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,96)
    $file = 'permissions.yml'
    $ziel = $folder & "permissions.yml"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    $file = 'server.log'
    $ziel = $folder & "server.log"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,97)
    $file = 'server.properties'
    $ziel = $folder & "server.properties"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,98)
    $file = 'white-list.txt'
    $ziel = $folder & "white-list.txt"
    _FTP_FileGet($hFTPConn,$file,$ziel)
    GUICtrlSetData($Progress1,99)
    MsgBox(0,"TEST","Finnisch mit Anderes")
    Return
    EndFunc

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

    Func start()
    MsgBox(0,"GO START","GO START")
    _FTP_Close($hFTPOpen)
    Exit
    EndFunc
    ;===============================================================================
    ; Function Name: _createLocalDirIfNecessary($s_LocalFile)
    ; Description:: prüft ob für eine Datei die Verzeichnisstruktur besteht, falls nötig wird diese angelegt
    ; Parameter(s): $s_LocalFile Dateuname für den die Verzeichnisstruktur geprüft werden soll
    ; Author(s): AutoBert (http://www.autoit.de)
    ;===============================================================================
    Func _createLocalDirIfNecessary($s_LocalFile)
    Local $aLocalPath = StringSplit($s_LocalFile, "\") ;hier lokale Pfad erstellen falls notwendig
    Local $sLocalPath = ""
    For $j = 1 To $aLocalPath[0] - 1
    $sLocalPath &= $aLocalPath[$j] & "\"
    If Not FileExists($sLocalPath) And Not StringInStr($aLocalPath[$j], ":") Then
    ;ConsoleWrite($sLocalPath & @CRLF)
    DirCreate($sLocalPath)
    EndIf
    Next
    EndFunc ;==>_createLocalDirIfNecessary

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

    ;===============================================================================
    ; Function Name: _FTP_FileList_Rekursiv($aResult, $sPath, $bFolders)
    ; Description:: füllt ein Array mit Dateien (und Verzeichnissen wenn $bFolders true) des FTP-Pfades inkl. aller Unterverzeichnisse
    ; Parameter(s): $aResult = das Array in dem die Ergebnisse eingefügt werden
    ; $sPath = Verzeichnispfad, der eingefügt werden soll
    ; $bFolders = True = auch Verzeichnisse einfügen, False = nur Dateien, Default = nur Dateien
    ; Author(s): AutoBert (http://www.autoit.de)
    ;===============================================================================
    Func _FTP_FileList_Rekursiv(ByRef $aResult, $sPath, $bFolders = False)
    Local $aFiles, $aFolders
    If $sPath <> "" Then
    _FTP_DirSetCurrent($hFTPConn, $sPath)
    $sPath = _FTP_DirGetCurrent($hFTPConn)
    EndIf
    $aFolders = _FTP_ListToArray($hFTPConn, 1)
    ;_ArrayDisplay($aFolders)
    If IsArray($aFolders) Then
    If $aFolders[0] > 0 Then
    For $i = 1 To $aFolders[0]
    If $aFolders[$i] <> '.' And $aFolders[$i] <> '..' Then
    ConsoleWrite("Folder: " & $sPath & "/" & $aFolders[$i] & @CRLF)
    If $bFolders Then _ArrayAdd($aResult, $sPath & "/" & $aFolders[$i])
    _FTP_FileList_Rekursiv($aResult, $sPath & "/" & $aFolders[$i], $bFolders)
    EndIf
    Next
    EndIf
    EndIf
    $aFiles = _FTP_ListToArray($hFTPConn, 2)
    If IsArray($aFiles) Then
    ;_ArrayDisplay($aFiles)
    If $aFiles[0] > 0 Then
    For $i = 1 To $aFiles[0]
    _ArrayAdd($aResult, $sPath & "/" & $aFiles[$i])
    ConsoleWrite("File: " & $sPath & "/" & $aFiles[$i] & @CRLF)
    Next
    EndIf
    EndIf
    $aResult[0] = UBound($aResult) - 1
    EndFunc ;==>_FTP_FileList_Rekursiv

    [/autoit]


    Hier der Log:

    Spoiler anzeigen


    Ich hoffe ihr könnt mir weiterhelfen
    Mfg Fliwatt

  • Bist du dir denn sicher, dass die Verbindung vom Server getrennt wird und es nicht durch die fehlerhafte Version von _FTP_FileList_Rekursiv kommt. Nimm die überarbeitete Version FTP_FileList_RecursivWA.au3 aus dem Anhang von [Beispiel] FTP-Downloader (rekursiv mit allen Unterverzeichnissen) Schau dir auch noch einmal das Beispiel DEMO_FTP_FileList_RecursivWA.au3 ich habe dort die Fehlermeldung für den speziellen Fall, dass es sich um einen MountPoint handelt ergänzt,

    mfg autoBert