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
#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
Ini Dateien:
Spoiler anzeigen
serverversion.ini (auf ftp server):
thisversion.ini (clientversion):
serverstate.ini (auf ftp server)
[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.
Mfg Fliwatt