FileZilla Server AddOn

  • 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
    [autoit]


    #include <File.au3>
    #include <array.au3>
    #Include <Date.au3>
    #Include <Constants.au3>
    #include <_Array2DJoin.au3>
    #include <String.au3>

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

    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)
    Opt("OnExitFunc","OnAutoItExit")
    HotKeySet("!{F5}", "OnAutoItExit")
    HotKeySet("!x", "TrayIcon")

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

    $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

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

    If ProcessExists("FileZilla Server.exe") Then
    TraySetIcon("FileZilla Server.exe")
    Else
    TraySetIcon("Uninstall.exe")
    EndIf

    $flag = 1

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

    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("")

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

    While 1
    Do
    $gettime = FileGetTime ($sFilePath, 0, 1)
    Sleep(1000)
    $newtime = FileGetTime ($sFilePath, 0, 1)
    Until $gettime <> $newtime
    _NewUser()
    _UserLogOff()
    _TrayView()
    WEnd

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

    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

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

    Func StartServer2()
    Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server.exe" /start', @ScriptDir, @SW_HIDE)
    EndFunc

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

    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

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

    Func StartStopServer()
    Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server.exe"', @ScriptDir, @SW_HIDE)
    EndFunc

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

    Func Interface()
    Run(@ComSpec & ' /c "' & @ScriptDir & '\FileZilla Server Interface.exe"', @ScriptDir, @SW_HIDE)
    EndFunc

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

    Func OnAutoItExit()
    FileDelete($sFilePath2)
    FileDelete($sFilePath3)
    FileDelete($sFilePath4)
    Exit
    EndFunc

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

    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

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

    Func TrayIcon()
    Opt("TrayIconHide", Not Opt("TrayIconHide", "Default"))
    EndFunc

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

    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, 8)
    _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

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

    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, 8)
    _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

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

    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

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

    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

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

    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

    [/autoit]