hi,
ich habe ein kleines filezilla server add on geschrieben. es ist noch nicht perfekt, aber es macht seinen job schon ganz gut.
damit es reibungslos funktioniert, sollte es im oder vom filezilla server liegen.
damit ist es nun möglich, den server zu starten/stoppen (status wird als tray icon angezeigt)
es ist möglich das interface hierüber zu starten.
schließen des programmes, interface und server in einem
im traytip stehen die aktuell verbundenen user (es scheint noch ein prob zu geben, wenn kein user drauf ist)
als popup wird angezeigt, welcher user mit welcher ip um wieviel uhr den server betreten, oder verlassen hat.
kleine verbesserungen sind noch in arbeit, sowie eine weiteres trayicon, wodurch man sehen kann, ob gerade ein user auf dem server ist oder nicht.
Spoiler anzeigen
#include <File.au3>
#include <array.au3>
#Include <Date.au3>
#Include <Constants.au3>
#include <_Array2DJoin.au3>
#include <String.au3>
Opt("TrayOnEventMode",1)
Opt("TrayMenuMode",1)
Opt("OnExitFunc","OnAutoItExit")
HotKeySet("!{F5}", "OnAutoItExit")
HotKeySet("!x", "TrayIcon")
$sFilePath = @ScriptDir & "\Logs\FileZilla Server.log"
$sFilePath2 = @ScriptDir & "\Logs\FZ Center LogOn.log"
$sFilePath3 = @ScriptDir & "\Logs\FZ Center LogOff.log"
$sFilePath4 = @ScriptDir & "\Logs\FZ Center aUser.log"
$newtime = 0
Global $olduser, $olduser2
Global $lines_A, $lines_B, $lines_C, $line
If ProcessExists("FileZilla Server.exe") Then
TraySetIcon("FileZilla Server.exe")
Else
TraySetIcon("Uninstall.exe")
EndIf
$flag = 1
If $flag = 0 Then
$serverOn1 = TrayCreateItem("Start/Stop Server")
TrayItemSetOnEvent($serverOn1, "StartStopServer")
$interface = TrayCreateItem("FZ Interface")
TrayItemSetOnEvent($interface, "Interface")
ElseIf $flag = 1 Then
$serverOn2 = TrayCreateItem("Start Server")
TrayItemSetOnEvent($serverOn2, "StartServer")
$serverOff = TrayCreateItem("Stop Server")
TrayItemSetOnEvent($serverOff, "StopServer")
$interface = TrayCreateItem("FZ Interface")
TrayItemSetOnEvent($interface, "Interface")
If ProcessExists("FileZilla Server.exe") Then
TrayItemSetState ($serverOff, $TRAY_ENABLE)
TrayItemSetState ($serverOn2, $TRAY_DISABLE)
Else
TrayItemSetState ($serverOn2, $TRAY_ENABLE)
TrayItemSetState ($serverOff, $TRAY_DISABLE)
EndIf
ElseIf $flag = 2 Then
$serverOn3 = TrayCreateItem("Start/Stop Server")
TrayItemSetOnEvent($serverOn3, "StartServer2")
$interface = TrayCreateItem("FZ Interface")
TrayItemSetOnEvent($interface, "Interface")
EndIf
TrayCreateItem("")
$exit = TrayCreateItem("Exit")
TrayItemSetOnEvent($exit, "OnAutoItExit")
$exit = TrayCreateItem("Exit + Stop")
TrayItemSetOnEvent($exit, "OnAutoItStop")
TrayCreateItem("")
While 1
Do
$gettime = FileGetTime ($sFilePath, 0, 1)
Sleep(1000)
$newtime = FileGetTime ($sFilePath, 0, 1)
Until $gettime <> $newtime
_NewUser()
_UserLogOff()
_TrayView()
WEnd
Func StartServer()
Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server.exe" /start', @ScriptDir, @SW_HIDE)
TrayItemSetState ($serverOff, $TRAY_ENABLE)
TrayItemSetState ($serverOn2, $TRAY_DISABLE)
TraySetIcon("FileZilla Server.exe")
EndFunc
Func StartServer2()
Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server.exe" /start', @ScriptDir, @SW_HIDE)
EndFunc
Func StopServer()
Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server.exe" /stop', @ScriptDir, @SW_HIDE)
TrayItemSetState ($serverOn2, $TRAY_ENABLE)
TrayItemSetState ($serverOff, $TRAY_DISABLE)
TraySetIcon("Uninstall.exe")
EndFunc
Func StartStopServer()
Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server.exe"', @ScriptDir, @SW_HIDE)
EndFunc
Func Interface()
Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server Interface.exe"', @ScriptDir, @SW_HIDE)
EndFunc
Func OnAutoItExit()
FileDelete($sFilePath2)
FileDelete($sFilePath3)
FileDelete($sFilePath4)
Exit
EndFunc
Func OnAutoItStop()
Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server.exe" /stop', @ScriptDir, @SW_HIDE)
ProcessClose("FileZilla Server Interface.exe")
FileDelete($sFilePath)
FileDelete($sFilePath2)
FileDelete($sFilePath3)
FileDelete($sFilePath4)
Exit
EndFunc
Func TrayIcon()
Opt("TrayIconHide", Not Opt("TrayIconHide", "Default"))
EndFunc
Func _NewUser()
_FileReadToArray($sFilePath, $lines_A)
For $i = UBound($lines_A) - 1 To 1 Step - 1
If Not StringRegExp($lines_A[$i], '230 Logged on', 0) Then
_ArrayDelete($lines_A, $i)
Else
If StringRegExp($lines_A[$i], 'not logged in', 0) Then
_ArrayDelete($lines_A, $i)
Else
$cutnr = StringMid($lines_A[$i], 1, 9)
$trim = StringMid($lines_A[$i], 9)
$trimright = StringTrimLeft($trim, 22)
$trimright2 = StringTrimRight($trimright, 15)
$final = _StringInsert($cutnr, $trimright2,
_ArrayAdd($lines_A, $final)
_ArrayDelete($lines_A, $i)
EndIf
EndIf
Next
_FileWriteFromArray($sFilePath2, $lines_A, 1)
_FileReadToArray($sFilePath2, $lines_A)
_FileWriteFromArray($sFilePath2, _ArrayUnique($lines_A), 1)
If @error Then
Else
$user = FileReadLine($sFilePath2, 1)
$trimnow = StringMid($user, 9)
If $user = $olduser Then
Else
$olduser = $user
SplashTextOn("", "Log On: " & $trimnow & _NowTime(5) , 350, 30, 671, 705, 1 + 32, "Lucida Console", 10)
Sleep(3000)
SplashOff( )
EndIf
EndIf
EndFunc
Func _UserLogOff()
_FileReadToArray($sFilePath, $lines_A)
For $i = UBound($lines_A) - 1 To 1 Step - 1
If Not StringRegExp($lines_A[$i], 'disconnected.', 0) Then
_ArrayDelete($lines_A, $i)
Else
If StringRegExp($lines_A[$i], 'not logged in', 0) Then
_ArrayDelete($lines_A, $i)
Else
$cutnr = StringMid($lines_A[$i], 1, 9)
$trim = StringMid($lines_A[$i], 9)
$trimright = StringTrimLeft($trim, 22)
$trimright2 = StringTrimRight($trimright, 15)
$final = _StringInsert($cutnr, $trimright2,
_ArrayAdd($lines_A, $final)
_ArrayDelete($lines_A, $i)
EndIf
EndIf
Next
_FileWriteFromArray($sFilePath3, $lines_A, 1)
_FileReadToArray($sFilePath3, $lines_A)
_FileWriteFromArray($sFilePath3, _ArrayUnique($lines_A), 1)
If @error Then
Else
$user2 = FileReadLine($sFilePath3, 1)
$trimnow2 = StringMid($user2, 9)
If $user2 = $olduser2 Then
Else
$olduser2 = $user2
SplashTextOn("", "Log Off: " & $trimnow2 & _NowTime(5) , 350, 30, 671, 705, 1 + 32, "Lucida Console", 10)
Sleep(3000)
SplashOff( )
EndIf
EndIf
EndFunc
Func _TrayView()
_FileReadToArray($sFilePath2, $lines_A)
For $i = UBound($lines_A) - 1 To 1 Step - 1
If Not StringRegExp($lines_A[$i], '[^\s]', 0) Then _ArrayDelete($lines_A, $i)
Next
_FileReadToArray($sFilePath3, $lines_B)
For $i = UBound($lines_B) - 1 To 1 Step - 1
If Not StringRegExp($lines_B[$i], '[^\s]', 0) Then _ArrayDelete($lines_B, $i)
Next
_ArrayDelete($lines_A, 0)
_ArrayDelete($lines_B, 0)
_Array2DJoin($lines_A, $lines_B)
_FileWriteFromArray($sFilePath4, $lines_A)
_FileReadToArray($sFilePath4, $lines_A)
_FileWriteFromArray($sFilePath4, _ArrayTotalUnique($lines_A), 1)
_FileReadToArray($sFilePath4, $lines_A)
If $lines_A[0] = 0 Then
TraySetToolTip("no user online")
ElseIf $lines_A[0] = 1 Then
TraySetToolTip(StringMid($lines_A[1], 9))
ElseIf $lines_A[0] = 2 Then
TraySetToolTip(StringMid($lines_A[1], 9) & @CRLF & StringMid($lines_A[2], 9))
ElseIf $lines_A[0] = 3 Then
TraySetToolTip(StringMid($lines_A[1], 9) & @CRLF & StringMid($lines_A[2], 9) & @CRLF & StringMid($lines_A[3], 9))
ElseIf $lines_A[0] = 4 Then
TraySetToolTip(StringMid($lines_A[1], 9) & @CRLF & StringMid($lines_A[2], 9) & @CRLF & StringMid($lines_A[3], 9) & @CRLF & StringMid($lines_A[4], 9))
EndIf
EndFunc
Func _ArrayTotalUnique(ByRef $aArray, $vDelim = '', $iBase = 1, $iUnique = 1)
If $vDelim = '' Then $vDelim = Chr(01)
Local $sHold, $sHoldArray
For $iCC = $iBase To UBound($aArray) - 1
$sHoldArray &= $aArray[$iCC] & $vDelim
Next
For $iCC = $iBase To UBound($aArray) - 1
If Not StringInStr($vDelim & $sHoldArray, $vDelim & $aArray[$iCC] & $vDelim, $iUnique, 2) Then _
$sHold &= $aArray[$iCC] & $vDelim
Next
Return StringSplit(StringTrimRight($sHold, StringLen($vDelim)), $vDelim)
EndFunc
Func _ArrayUnique(ByRef $aArray, $vDelim = '', $iBase = 1, $iUnique = 1)
If $vDelim = '' Then $vDelim = Chr(01)
Local $sHold
For $iCC = $iBase To UBound($aArray) - 1
If Not StringInStr($vDelim & $sHold, $vDelim & $aArray[$iCC] & $vDelim, $iUnique) Then _
$sHold &= $aArray[$iCC] & $vDelim
Next
Return StringSplit(StringTrimRight($sHold, StringLen($vDelim)), $vDelim)
EndFunc ;==>_ArrayUnique