commit 2695b4139953e39a37044288b75e3f4903cef626 Author: r0n1n7an Date: Thu Aug 21 16:38:17 2025 +0800 init commit diff --git a/FileList/FileList.au3 b/FileList/FileList.au3 new file mode 100644 index 0000000..ceb676f --- /dev/null +++ b/FileList/FileList.au3 @@ -0,0 +1,149 @@ +#NoTrayIcon +#Region ;**** Directives created by AutoIt3Wrapper_GUI **** +#AutoIt3Wrapper_Outfile_x64=FileList.exe +#AutoIt3Wrapper_UseUpx=y +#AutoIt3Wrapper_UseX64=y +#AutoIt3Wrapper_Change2CUI=y +#AutoIt3Wrapper_Res_Comment=Summary File List Of Specified Folders +#AutoIt3Wrapper_Res_Description=Summary File List Of Specified Folders +#AutoIt3Wrapper_Res_Fileversion=1.2.0.0 +#AutoIt3Wrapper_Res_ProductVersion=1.2.0.0 +#AutoIt3Wrapper_Res_LegalCopyright=TE / Vayne Tan +#AutoIt3Wrapper_Res_Language=1033 +#AutoIt3Wrapper_Res_Field=CompanyName|Wistron InfoComm (Chongqing) Co., Ltd. +#AutoIt3Wrapper_Res_Field=ProductName|FileList.exe +#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** +;Change History +;1.1.0.0 Add check ping result of each hosts. +;1.2.0.0 Fixed an array out of bounds issue. +;#AutoIt3Wrapper_Icon=App.ico + +#Include +#Include + +Global $gSRC = @ScriptDir, $gTYP = 0, $gFTR = '*||', $gOUT = @ScriptDir&'\Result.txt' +Global $IniFile = StringTrimRight(@ScriptName, 4) & '.ini' +Global $gUSR = IniRead($IniFile, 'Settings', 'DefaultUser', 'Administrator') +Global $gPWD = IniRead($IniFile, 'Settings', 'DefaultPassword', 'CASPER') +Global $Configs = IniReadSectionNames($IniFile) + + +__Main__() + +Func __Main__() + + Local $SRC, $TYP, $FTR, $OUT, $USR, $PWD + + If $CMDLINE[0] >= 1 Then + + If $CMDLINE[1] = '/?' Then + __Usage__() + Exit + EndIf + + For $i = 1 To $CMDLINE[0] Step 1 + If StringLeft($CMDLINE[$i], 5) = '/SRC:' Then $SRC = StringTrimLeft($CMDLINE[$i], 5) + If StringLeft($CMDLINE[$i], 5) = '/TYP:' Then $TYP = StringTrimLeft($CMDLINE[$i], 5) + If StringLeft($CMDLINE[$i], 5) = '/FTR:' Then $FTR = StringTrimLeft($CMDLINE[$i], 5) + If StringLeft($CMDLINE[$i], 5) = '/OUT:' Then $OUT = StringTrimLeft($CMDLINE[$i], 5) + + If StringLeft($CMDLINE[$i], 5) = '/USR:' Then + $USR = StringTrimLeft($CMDLINE[$i], 5) + Else + $USR = $gUSR + EndIf + + If StringLeft($CMDLINE[$i], 5) = '/PWD:' Then + $PWD = StringTrimLeft($CMDLINE[$i], 5) + Else + $PWD = $gPWD + EndIf + Next + CheckFileExistence($SRC, $TYP, $FTR, $OUT, $USR, $PWD) + Return + Else + If Not IsArray($Configs) Then + ConsoleWrite(">>> Configuration Format Error !" &@CRLF) + Exit + EndIf + For $i = 1 To $Configs[0] Step 1 + If $Configs[$i] <> 'Settings' And StringLeft($Configs[$i], 6) = 'Config' Then + $SRC = StringStripWS(IniRead($IniFile, $Configs[$i], "SourcePath", $gSRC), 2) + $TYP = Int(IniRead($IniFile, $Configs[$i], "ReturnType", $gTYP)) + $FTR = IniRead($IniFile, $Configs[$i], "Filter", $gFTR) + $OUT = IniRead($IniFile, $Configs[$i], "Output", $gOUT) + + If StringLeft($OUT, 2) = '.\' Then + $OUT = @ScriptDir&'\'&StringTrimLeft($OUT, 2) + EndIf + + $USR = IniRead($IniFile, $Configs[$i], "User", $gUSR) + $PWD = IniRead($IniFile, $Configs[$i], "Password", $gPWD) + + CheckFileExistence($SRC, $TYP, $FTR, $OUT, $USR, $PWD) + EndIf + Next + EndIf +EndFunc + + + +Func CheckFileExistence($SourcePath=$gSRC, $iType=$gTYP, $Filter=$gFTR, $OutFile=$gOUT, $UserName=$gUSR, $PassWord=$gPWD) + ;iType = 0 : Enum Files and Folders. + ;iType = 1 : Enum Files. + ;iType = 2 : Enum Folders. + ;$SourcePath = '\\' &$SourcePath &'\Image\Zeus\' + Local $IP, $Check = 0, $Flag = 0 + If StringLeft($SourcePath, 2) = '\\' Then + $IP = _StringBetween($SourcePath, '\\', '\') + If IsArray($IP) Then + $Check = Ping($IP[0], 1000) + If $Check = 0 Then + ConsoleWrite('Ping Host Error: ' & $IP[0] &@CRLF) + Return False + EndIf + EndIf + $Flag = DriveMapAdd('', $SourcePath, 0, $UserName, $PassWord) + EndIf + + If FileExists($OutFile) Then FileDelete($OutFile) + + Local $RESULT, $fOpen + Local $RESULT = _FileListToArrayRec($SourcePath, $Filter, $iType, 1, 1) + + If IsArray($RESULT) Then + ConsoleWrite(@CRLF& '-----> Source: ' &$SourcePath &@CRLF &@CRLF) + ;$RESULT = _ArraySearch($DirList, $Target, 0, 0, 0, 1) + $fOpen = FileOpen($OutFile, 9) + If $fOpen = -1 Then + FileClose($fOpen) + ConsoleWrite('Open File Failed: ' &$OutFile &@CRLF) + Return False + EndIf + For $i = 1 To $RESULT[0] + ConsoleWrite($RESULT[$i] &@CRLF) + FileWrite($fOpen, $RESULT[$i] &@CRLF) + Next + FileClose($fOpen) + Return True + EndIf + + If $Flag = 1 Then DriveMapDel($SourcePath) + +EndFunc + + + +Func __Usage__() + Local $Tips = @CRLF & "FileList.exe V1.0" &@CRLF &@CRLF _ + & "Parameters: " &@CRLF _ + & StringFormat('%-20s%-s\r\n', '/SRC:[Source Path]', 'Initial path used to generate filelist.') _ + & StringFormat('%-20s%-s\r\n', '/OUT:[Result File]', 'Initial path or file name used to write result.') _ + & StringFormat('%-20s%-s\r\n', '/FTR:[Filter]', 'Filter, Include|Exclude|Exclude_Folders, Default="*||".') _ + & StringFormat('%-20s%-s\r\n', '/TYP:[Return Type]', '0: Files & Folders, 1: Files Only, 2: Folders Only.') _ + & StringFormat('%-20s%-s\r\n', '/USR:[Remote User]', 'Username for remote path (When SRC start with "\\").') _ + & StringFormat('%-20s%-s\r\n', '/PWD:[Remote Pwd]', 'Password for remote path (When SRC start with "\\").') &@CRLF + ConsoleWrite($Tips) + Return +EndFunc + diff --git a/FileList/FileList.exe b/FileList/FileList.exe new file mode 100644 index 0000000..6d4e62e Binary files /dev/null and b/FileList/FileList.exe differ diff --git a/FileList/FileList.ini b/FileList/FileList.ini new file mode 100644 index 0000000..1bb22f8 --- /dev/null +++ b/FileList/FileList.ini @@ -0,0 +1,70 @@ +// ReturnType: +# 0: List Files and Folders (Default). +# 1: List Only Files. +# 2: List Only Folders. +// Filter +# Include|Exclude|Exclude_Folders +# Default=*|| + +[Config-1] +SourcePath=\\172.168.0.2\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.2.TXT +#User=Administrator +#Password=CASPER + +[Config-2] +SourcePath=\\172.168.0.3\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.3.TXT + +[Config-3] +SourcePath=\\172.168.0.4\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.4.TXT + +[Config-4] +SourcePath=\\172.168.0.5\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.5.TXT + +[Config-5] +SourcePath=\\172.168.0.6\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.6.TXT + +[Config-6] +SourcePath=\\172.168.0.12\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.12.TXT + +[Config-7] +SourcePath=\\172.168.0.13\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.13.TXT + +[Config-8] +SourcePath=\\172.168.0.14\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.14.TXT + +[Config-9] +SourcePath=\\172.168.0.15\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.15.TXT + +[Config-10] +SourcePath=\\172.168.0.16\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.16.TXT + +[Config-11] +SourcePath=\\172.168.0.20\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.20.TXT + +[Config-12] +SourcePath=\\172.168.0.7\Image\Zeus +ReturnType=2 +Output=.\TMP\172.168.0.7.TXT + diff --git a/FileList/ShowConsole.exe b/FileList/ShowConsole.exe new file mode 100644 index 0000000..50084bc Binary files /dev/null and b/FileList/ShowConsole.exe differ diff --git a/FileList/SummaryImageList.bat b/FileList/SummaryImageList.bat new file mode 100644 index 0000000..079f747 --- /dev/null +++ b/FileList/SummaryImageList.bat @@ -0,0 +1,19 @@ +@Echo Off +Title Summary_Image_List +cd /d %~dp0 +ShowConsole.exe MINIMIZED + +:::::::::::::::::::::::::::::: +SET TempDir=%~dp0TMP +SET TargetDir=D:\Vol1\Message\PXE\~ImageMap +:::::::::::::::::::::::::::::: + +if not exist %TempDir% md %TempDir% +if exist %TempDir%\*.* del /f /q %TempDir%\*.* + +FileList.exe + +Timeout /t 2 /nobreak >nul + +Copy %TempDir%\*.txt %TargetDir%\ /Y + diff --git a/LB.ico b/LB.ico new file mode 100644 index 0000000..a1fd898 Binary files /dev/null and b/LB.ico differ diff --git a/LoadBalanceSystem.au3 b/LoadBalanceSystem.au3 new file mode 100644 index 0000000..51d0024 --- /dev/null +++ b/LoadBalanceSystem.au3 @@ -0,0 +1,810 @@ +#NoTrayIcon +#Region ;**** Directives created by AutoIt3Wrapper_GUI **** +#AutoIt3Wrapper_Icon=LB.ico +#AutoIt3Wrapper_Outfile=LoadBalanceSystem32.exe +#AutoIt3Wrapper_Outfile_x64=LoadBalanceSystem.exe +#AutoIt3Wrapper_UseUpx=y +#AutoIt3Wrapper_UseX64=y +#AutoIt3Wrapper_Res_Comment=SMB Load Balance +#AutoIt3Wrapper_Res_Description=SMB Load Balance +#AutoIt3Wrapper_Res_Fileversion=2.2.0.0 +#AutoIt3Wrapper_Res_ProductVersion=2.2.0.0 +#AutoIt3Wrapper_Res_LegalCopyright=TE / Vayne Tan +#AutoIt3Wrapper_Res_Language=1033 +#AutoIt3Wrapper_Res_Field=Compile Date|%DATE% %TIME% +#AutoIt3Wrapper_Res_Field=CompanyName|WCQTE +#AutoIt3Wrapper_Res_Field=ProductName|LoadBalanceSystem.exe +#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** +;Change History: +; V1.1 Fixed Wrong Date/Time at Log Files. +; V1.2 Fixed Memory Leak Issue. +;20180712 V1.3 Delete Bad Format of Request File Name: .RRR +;20180714 V1.4 Randomize Muti-Network or Equal Connection Servers when $EqualSort = 1 +;20180717 V1.4.0.1 Fixed Wrong Keywords at Log Files. +;20180718 V1.4.0.2 Open Src/Rst Folder when click Src/Rst Label on GUI. +;20180731 V1.4.0.3 Change CheckConfigs Logic. +;20180802 V1.4.0.4 Add check existence of ini file @ CheckConfigs() function. +;20180915 V1.5.0.0 Optimised program logic. +;20181217 V1.5.0.5 Optimised Logs & GUI text. +;20190225 V1.6.0.0 Add ResponseFormat = 1 ==> .ini file format; 2 ==> .bat file format. (Set Server=xxx) +;20190302 V1.6.0.0 Remove IMAGE=$IMAGE from GUI & LogFile when WorkMode=1 +;20190302 V1.7.0.0 SortingWaitingConnection() function support ResponseFormat=2 (.bat file) +;20200220 V1.8.0.0 Rename confused variables, add open @ScriptDir while click WorkMode/ServerNum label. +;20200619 V2.0.0.0 Add invoke warning interface while exceptions happen. +;20200830 V2.1.0.0 Add specify log file path and error file path by config file. +;20200830 V2.2.0.0 Optimise GUI. + +#Include +#Include +#Include +#Include +#Include +#Include +#Include +#Include +#Include +#Include +#Include +#Include +#Include + +Break(0) +Opt("GUICloseOnESC", 0) +Opt("GUIOnEventMode", 1) +Opt("GUIResizeMode", 1) + +Global $AppName = "LoadBalanceSystem", $AppVer = "V2.2" +Global $AppFullName = $AppName&" "&$AppVer + +Global $SuffixRRR, $SuffixAAA, $SuffixList, $ChkCfg = "Starting ..." +Global $Datas[1][5], $DatasCopy, $idGUI, $idMessage, $idError +Global $idFolderGroup, $idSrcLbl, $idRstLbl, $idListLbl +Global $idStatusGroup, $idSvrNum, $idWorkMode, $idChkCfg + +Global $IniFile = StringTrimRight(@ScriptName, 4) & ".ini" + +Global $ID = IniRead($IniFile, "System", "ID", "SN") +Global $WorkMode = Int(IniRead($IniFile, "System", "WorkMode", "0")) +Global $ServerNum = Int(IniRead($IniFile, "System", "ServerNum", "0")) +Global $EqualSort = Int(IniRead($IniFile, "System", "EqualSort", "0")) +Global $TimeoutCheck = Int(IniRead($IniFile, "System", "TimeoutCheck", "0")) +Global $TimeoutMinutes = Int(IniRead($IniFile, "System", "TimeoutMinutes", "5")) +Global $ResponseFormat = Int(IniRead($IniFile, "System", "ResponseFormat", "1")) + +;Variables for Folder Group +Global $SrcFolder = StringStripWS(IniRead($IniFile, "Folders", "SourceFolder", ""), 8) +Global $RstFolder = StringStripWS(IniRead($IniFile, "Folders", "ResultFolder", ""), 8) +Global $ListFolder = StringStripWS(IniRead($IniFile, "Folders", "FileListFolder", ""), 8) +Global $LogFilePath = StringStripWS(IniRead($IniFile, "Folders", "LogFilePath", @ScriptDir & "\~LOG"), 8) +Global $ErrFilePath = StringStripWS(IniRead($IniFile, "Folders", "ErrFilePath", @ScriptDir & "\~ERR"), 8) +;Variables for Warning Action +Global $Action = IniRead($IniFile, "Warning", "Action", "0") +Global $WarningID = IniRead($IniFile, "Warning", "WarningID", "LoadBalance") +Global $Interface = IniRead($IniFile, "Warning", "Interface", "LBWarning.bat") +Global $Interval = Int(IniRead($IniFile, "Warning", "Interval", "900")) +Global $LastErrTime = IniRead($IniFile, "Warning", "LastErrTime", "0000/00/00 00:00:00") + + +__Main__() + +Func __Main__() + If FileExists($LogFilePath) = 0 Then DirCreate($LogFilePath) + If FileExists($ErrFilePath) = 0 Then DirCreate($ErrFilePath) + + AppendLogs('LOG', $AppFullName & " Starting ...") + AppendLogs('LOG', "Work Mode: " & $WorkMode) + + ;If WinExists($AppFullName) Then WinKill($AppFullName) + If WinExists($AppFullName) Then + WinActivate($AppFullName) + Exit + EndIf + + AutoItWinSetTitle($AppFullName) + + CreateGUI() + + Local $Chk = CheckConfigs() + If $Chk = True Then + GUICtrlSetData($idChkCfg, "Runing") + GUICtrlSetColor($idChkCfg, 0x008000) + Else + While 1 + ;ConsoleWrite("Config Error !" &@CRLF) + Sleep(1000) + WEnd + EndIf + + LoadingBalance() + +EndFunc + + + +Func CreateGUI() + + Local $lblHeight = 20 + $idGUI = GUICreate($AppFullName, 800, 600, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_SIZEBOX, $WS_MINIMIZEBOX, $WS_MAXIMIZEBOX)) + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + GUISetFont(12, 0, 0, "Fixedsys") + + ;Folder Group + $idFolderGroup = GUICtrlCreateGroup("Folder", 15, 10, 330, 110) + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + + GUICtrlCreateLabel("SrcFolder:", 20, 30, 110, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + GUICtrlCreateLabel("DstFolder:", 20, 60, 110, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + GUICtrlCreateLabel("ListFolder:", 20, 90, 110, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + $idSrcLbl = GUICtrlCreateLabel($SrcFolder, 105, 30, 230, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetColor(-1,0x0000FF) + GUICtrlSetBkColor(-1, 0xDDDDDD) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + $idRstLbl = GUICtrlCreateLabel($RstFolder, 105, 60, 230, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetColor(-1,0x0000FF) + GUICtrlSetBkColor(-1, 0xDDDDDD) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + $idListLbl = GUICtrlCreateLabel($ListFolder, 105, 90, 230, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetColor(-1,0x0000FF) + GUICtrlSetBkColor(-1, 0xDDDDDD) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + GUICtrlCreateGroup("", -99, -99, 1, 1) + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + + ;Status Group + $idStatusGroup = GUICtrlCreateGroup("Status", 355, 10, 330, 110) + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + + GUICtrlCreateLabel("WorkMode:", 360, 30, 110, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + GUICtrlCreateLabel("ServerNum:", 360, 60, 110, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + GUICtrlCreateLabel("AppStatus:", 360, 90, 110, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + $idWorkMode = GUICtrlCreateLabel($WorkMode, 445, 30, 230, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetColor(-1,0x0000FF) + GUICtrlSetBkColor(-1, 0xDDDDDD) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + $idSvrNum = GUICtrlCreateLabel($ServerNum, 445, 60, 230, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetColor(-1,0x0000FF) + GUICtrlSetBkColor(-1, 0xDDDDDD) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + $idChkCfg = GUICtrlCreateLabel($ChkCfg, 445, 90, 230, $lblHeight, BitOR($SS_LEFT, $SS_CENTERIMAGE)) + GUICtrlSetResizing(-1, $GUI_DOCKHEIGHT) + GUICtrlSetColor(-1,0xFF0000) + GUICtrlSetBkColor(-1, 0xDDDDDD) + GUICtrlSetFont(-1, 10, 0, 0, 'Consolas') + + GUICtrlCreateGroup("", -99, -99, 1, 1) + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + + ;Message Table + GUICtrlCreateTab(15, 130, 770, 460) + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + + GUICtrlCreateTabItem("Message") + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + $idMessage = GUICtrlCreateEdit("", 20, 160, 760, 425, BitOR($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY)) ;$WS_HSCROLL, + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + GUIctrlSetFont(-1, 10, 0, 0, "Consolas") + + ;Error Table + GUICtrlCreateTab(15, 130, 670, 360) + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + GUICtrlCreateTabItem("Error") + $idError = GUICtrlCreateEdit("", 20, 160, 760, 425, BitOR($WS_VSCROLL, $ES_AUTOVSCROLL, $ES_READONLY)) ;$WS_HSCROLL, + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + GUIctrlSetFont(-1, 10, 0, 0, "Consolas") + GUICtrlSetColor(-1, 0xFF3333) + + GUICtrlCreateTabItem("") + GUICtrlSetResizing(-1, $GUI_DOCKAUTO) + + _GUICtrlEdit_SetLimitText($idError, 10000000) + _GUICtrlEdit_SetLimitText($idMessage, 10000000) + + Local $idDummySubmit = GUICtrlCreateDummy() + GUICtrlSetOnEvent($idDummySubmit, 'QuietExit') + Local $aAccelKeys[1][2] = [["^!x", $idDummySubmit]] + GUISetAccelerators($aAccelKeys, $idGUI) + + GUISetOnEvent($GUI_EVENT_CLOSE, "CloseAction") + GUICtrlSetOnEvent($idSrcLbl, "__Open_Src_Folder") + GUICtrlSetOnEvent($idRstLbl, "__Open_Rst_Folder") + GUICtrlSetOnEvent($idListLbl, "__Open_List_Folder") + GUICtrlSetOnEvent($idWorkMode, "__Open_App_Folder") + GUICtrlSetOnEvent($idSvrNum, "__Open_App_Folder") + GUISetState(@SW_SHOW) + + _ReduceMemory(@AutoItPID) + +EndFunc + + + +Func CheckConfigs() + Local $Err, $Check, $Result = True + + $LastErrTime = IniRead($IniFile, "Warning", "LastErrTime", "") + If $LastErrTime = "" Or $LastErrTime = "0000/00/00 00:00:00" Then + IniWrite($IniFile, "Warning", "LastErrTime", _NowCalc()) + EndIf +;Check Ini File Existence + $Check = FileExists($IniFile) + If $Check = 0 Then + $Result = False + $Err = "Missing Config File: " & $IniFile + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + GUICtrlSetData($idChkCfg, "Missing Cfg !") + GUICtrlSetColor($idChkCfg, 0xFF0000) + Return $Result + Else + GUICtrlSetColor($idSrcLbl, 0x0000FF) + EndIf +;Check SrcFolder + $Check = FileExists($SrcFolder) + If $Check = 0 Then + $Result = False + $Err = "Config Key Error: SrcFolder = " & $SrcFolder &" --> Not Exist" + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + GUICtrlSetData($idChkCfg, "Config Error!") + GUICtrlSetColor($idChkCfg, 0xFF0000) + GUICtrlSetColor($idSrcLbl, 0xFF0000) + Else + GUICtrlSetColor($idSrcLbl, 0x0000FF) + EndIf + +;Check RstFolder + $Check = FileExists($RstFolder) + If $Check = 0 Then + $Result = False + $Err = "Config Key Error: RstFolder = " & $RstFolder &" --> Not Exist" + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + GUICtrlSetData($idChkCfg, "Config Error!") + GUICtrlSetColor($idChkCfg, 0xFF0000) + GUICtrlSetColor($idRstLbl, 0xFF0000) + Else + GUICtrlSetColor($idRstLbl, 0x0000FF) + EndIf + +;Check File List Folder + $Check = FileExists($ListFolder) + If $Check = 0 Then + $Result = False + $Err = "Config Key Error: FileListFolder = " & $ListFolder &" --> Not Exist" + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + GUICtrlSetData($idChkCfg, "Config Error!") + GUICtrlSetColor($idChkCfg, 0xFF0000) + GUICtrlSetColor($idListLbl, 0xFF0000) + EndIf + +;Check Folders Suffix + If StringLeft($SrcFolder, 2) = ".\" Then + $SuffixRRR = StringReplace($SrcFolder, ".\", @ScriptDir&"\") + $SuffixRRR = $SuffixRRR & "\" + Else + $SuffixRRR = $SrcFolder & "\" + EndIf + ;ConsoleWrite($SuffixRRR&@CRLF) + + If StringLeft($RstFolder, 2) = ".\" Then + $SuffixAAA = StringReplace($RstFolder, ".\", @ScriptDir&"\") + $SuffixAAA = $SuffixAAA & "\" + Else + $SuffixAAA = $RstFolder & "\" + EndIf + ;ConsoleWrite($SuffixAAA&@CRLF) + + If StringLeft($ListFolder, 2) = ".\" Then + $SuffixList = StringReplace($ListFolder, ".\", @ScriptDir&"\") + $SuffixList = $SuffixList & "\" + Else + $SuffixList = $ListFolder & "\" + EndIf + ;ConsoleWrite($SuffixAAA&@CRLF) + +;Check WorkMode + Switch $WorkMode + Case 1 + GUICtrlSetColor($idWorkMode, 0x0000FF) + Case 2 + GUICtrlSetColor($idWorkMode, 0x0000FF) + Case Else + $Result = False + $Err = "Config Key Error: WorkMode = " & $WorkMode + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + GUICtrlSetData($idChkCfg, "Config Error!") + GUICtrlSetColor($idChkCfg, 0xFF0000) + GUICtrlSetColor($idWorkMode, 0xFF0000) + EndSwitch + +;Check Server Num + If $ServerNum < 1 Then + $Result = False + $Err = "Config Key Error: ServerNum = " & $ServerNum + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + GUICtrlSetData($idChkCfg, "Config Error!") + GUICtrlSetColor($idChkCfg, 0xFF0000) + GUICtrlSetColor($idSvrNum, 0xFF0000) + Else + GUICtrlSetColor($idSvrNum, 0x0000FF) + EndIf + +;Check Servers + ;$Datas[$i-1][0] : HostName/IP + ;$Datas[$i-1][1] : Share Folder + ;$Datas[$i-1][2] : Max Link Limit + ;$Datas[$i-1][3] : Current Actual Connection + ;$Datas[$i-1][4] : Waitting Connection + ReDim $Datas[$ServerNum][5] + For $i = 1 To $ServerNum Step 1 + $Datas[$i-1][0] = IniRead($IniFile, "Server-"&$i, "Server", "") + $Datas[$i-1][1] = IniRead($IniFile, "Server-"&$i, "Share", "") + $Datas[$i-1][2] = Int(IniRead($IniFile, "Server-"&$i, "Limit", "0")) + + If $Datas[$i-1][0] = "" Or $Datas[$i-1][1] = "" Then + $Result = False + $Err = "Config Key Error: [Server-" &$i & "]: Server/Share=" & $Datas[$i-1][0] + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + ExitLoop + EndIf + + If IsNumber($Datas[$i-1][2]) = 0 Or $Datas[$i-1][2] < 0 Then + $Result = False + $Err = "Config Key Error: [Server-" &$i & "]: Limit=" & $Datas[$i-1][2] + AppendLogs('ERR', $Err) + AppendText($idError, $Err &@CRLF) + ExitLoop + EndIf + Next + + ;ConsoleWrite("Check Configs Result: " & $Result &@CRLF) + Return $Result + +EndFunc + + + +Func LoadingBalance() + Local $hSearch, $Request, $Response, $Ret, $Header, $IMAGE, $fsRet, $TempFile + + While 1 + Sleep(100) + $hSearch = FileFindFirstFile($SuffixRRR & "*.RRR") + If $hSearch = -1 Then + FileClose($hSearch) + _ReduceMemory(@AutoItPID) + Sleep(500) + ContinueLoop 1 + EndIf + + While 1 + Sleep(100) + $Request = FileFindNextFile($hSearch) + If @Error Then + FileClose($hSearch) + ExitLoop 1 + EndIf + If $Request = ".RRR" Then + AppendText($idError, 'Delete File: .RRR' &@CRLF) + ;AppendLogs('LOG', 'Delete File: .RRR') + FileDelete($SuffixRRR & $Request) + ContinueLoop 1 + EndIf + If FileGetSize($SuffixRRR & $Request) = 0 Then ContinueLoop 1 + + $Header = IniRead($SuffixRRR & $Request, "RRR", $ID, "") + $Header = StringStripWS($Header, 8) + If $Header = "" Then + AppendText($idError, "Delete File: " & $SuffixRRR & $Request & " ---> NO HEADER: " &$ID &@CRLF) + AppendLogs('ERR', "Delete File: " & $SuffixRRR & $Request & " ---> NO HEADER: " &$ID &@CRLF) + FileDelete($SuffixRRR & $Request) + ContinueLoop 1 + EndIf + $IMAGE = IniRead($SuffixRRR & $Request, "RRR", "IMAGE", "") + $IMAGE = StringStripWS($IMAGE, 8) + $SERVERS = IniRead($SuffixRRR & $Request, "RRR", "SERVERS", "") + $SERVERS = StringStripWS($SERVERS, 8) + ;$Response = StringTrimRight($SuffixAAA & $Request, 4) & ".AAA" + + SortingWaitingConnection() + SortingCurrentConnection() + $Ret = ReplyRequest($Header, $IMAGE, $SERVERS) + + If $ResponseFormat = 1 Then + $Response = StringTrimRight($Request, 4) & ".AAA" + $TempFile = StringTrimRight($Request, 4) & ".TMP" + IniWrite(@TempDir&"\"&$Response, "AAA", $ID, $Header) + IniWrite(@TempDir&"\"&$Response, "AAA", "IMAGE", $IMAGE) + IniWrite(@TempDir&"\"&$Response, "AAA", "SERVER", $Ret) + FileMove(@TempDir&"\"&$Response, $SuffixAAA & $Response, 1) + ElseIf $ResponseFormat = 2 Then + $Response = StringTrimRight($Request, 4) & ".AAA" + $TempFile = StringTrimRight($Request, 4) & ".TMP" + $fsRet = FileOpen(@TempDir&"\"&$Response, 522) + FileWrite(@TempDir&"\"&$Response, "Set Server=" & $Ret &@CRLF) + FileClose($fsRet) + FileMove(@TempDir&"\"&$Response, $SuffixAAA & $Response, 1) + EndIf + + If $WorkMode = 1 Then + AppendText($idMessage, $ID&"="&$Header& "; SERVER=" &$Ret &@CRLF) + AppendLogs('LOG', $ID&"="&$Header& "; SERVER=" &$Ret) + Else + AppendText($idMessage, $ID&"="&$Header& "; SERVER=" &$Ret& "; IMAGE=" &$IMAGE &@CRLF) + AppendLogs('LOG', $ID&"="&$Header& "; SERVER=" &$Ret& "; IMAGE=" &$IMAGE) + EndIf + FileDelete($SuffixRRR & $Request) + WEnd + _ReduceMemory(@AutoItPID) + WEnd +EndFunc + + + +Func ReplyRequest($Header="", $IMAGE="", $SERVERS="") + Local $SkipCnt=0, $Err="", $Tips="", $TipsLog="" + + For $z = 1 To $ServerNum Step 1 + $Tips &= '[' & $Datas[$z-1][0] &' '& $Datas[$z-1][2] &':'& $Datas[$z-1][3] &':'& $Datas[$z-1][4] & "] " + $TipsLog &= "[" & $Datas[$z-1][0] &" "& $Datas[$z-1][2] &":"& $Datas[$z-1][3] &":"& $Datas[$z-1][4] _ + &"/"& StringFormat('%-.2f',($Datas[$z-1][3]+$Datas[$z-1][4])/$Datas[$z-1][2]) & "] " + Next + + ;ConsoleWrite($Tips &@CRLF) + AppendText($idMessage, $TipsLog &@CRLF) + AppendLogs('LOG', $TipsLog) + + If $WorkMode = 2 Then + If $IMAGE = "" Then + $Err = $ID&": "&$Header & "; ErrorInfo: Missing ImagePN; WorkMode: "&$WorkMode + AppendText($idError, $Err &@CRLF) + AppendLogs('ERR', $Err) + ;If $Action Then WarningAction("Missing_Image_PN "&$Header&" "&$IMAGE) + Return "ERROR:IMAGE_PN" + Else + For $v = 1 To $ServerNum Step 1 + If Not FileExists($SuffixList & $DatasCopy[$v-1][0] & '.txt') Then + $DatasCopy[$v-1][3] = -1 + EndIf + If Not SearchStringInFile($SuffixList & $DatasCopy[$v-1][0] & '.txt', $IMAGE) Then + $DatasCopy[$v-1][3] = -1 + $SkipCnt += 1 + EndIf + Next + If $SkipCnt >= $ServerNum Then + $Err = $ID&": "&$Header& "; ErrorInfo: NO IMAGE; ImagePN: " &$IMAGE + AppendText($idError, $Err &@CRLF) + AppendLogs('ERR', $Err) + If $Action Then WarningAction("NO_IMAGE "&$Header&" "&$IMAGE) + Return "ERROR:NO_IMAGE" + EndIf + EndIf + $SkipCnt = 0 + EndIf + + For $i = 1 To $ServerNum Step 1 + If $DatasCopy[$i-1][3] <> -1 Then + If $DatasCopy[$i-1][3] + $DatasCopy[$i-1][4] < $DatasCopy[$i-1][2] Then + ;ConsoleWrite("Response: "&$DatasCopy[$i-1][0]&@CRLF) + Return $DatasCopy[$i-1][0] + EndIf + EndIf + Next + If $Action Then WarningAction("FULL_LOAD "&$Header&" "&$IMAGE) + Return "ERROR:MAX_LINK" +EndFunc + + + +Func SortingWaitingConnection() + Local $Temp = "" + For $a = 1 To $ServerNum Step 1 + $Datas[$a-1][4] = 0 + Next + Local $RRR_List = _FileListToArray($SuffixAAA, "*.AAA", 1, False) + If IsArray($RRR_List) Then + For $k = 1 To $RRR_List[0] Step 1 + If $TimeoutCheck = 1 Then + DeleteOldReplyFile($SuffixAAA & $RRR_List[$k]) + EndIf + ;Get Server=? from each file in DstFolder. + If $ResponseFormat = 2 Then + $Temp = FileRead($SuffixAAA & $RRR_List[$k]) + If @Error Then ContinueLoop + If $Temp = "" Then ContinueLoop + $Temp = StringReplace($Temp, "Set Server=", "") + $Temp = StringStripWS($Temp, 8) + ;ConsoleWrite("Server: " &$Temp &@CRLF) + ElseIf $ResponseFormat = 1 Then + $Temp = StringStripWS(IniRead($SuffixAAA & $RRR_List[$k], "AAA", "SERVER", ""), 8) + Else + ContinueLoop + EndIf + If $Temp = "" Then ContinueLoop + For $b = 1 To $ServerNum Step 1 + If $Temp = $Datas[$b-1][0] Then $Datas[$b-1][4] += 1 + Next + Next + EndIf +EndFunc + + + +Func SortingCurrentConnection() + Local $TmpCol0, $TmpCol1, $TmpCol2, $TmpCol3, $TmpCol4, $Random + + For $i=1 To $ServerNum Step 1 + $Datas[$i-1][3] = ConnectionEnum($Datas[$i-1][0], $Datas[$i-1][1]) + Next + + $DatasCopy = $Datas + + ;Random for Muti-Network Servers or Equal Value of Connection Servers + If $EqualSort = 1 Then + For $n = 1 To $ServerNum - 1 Step 1 + If $DatasCopy[$n-1][3] = $DatasCopy[$n][3] Then + $Random = Random(0, 1, 1) + ;ConsoleWrite('Random: ' & $Random &@CRLF) + If $Random = 1 Then + $TmpCol0 = $DatasCopy[$n-1][0] + $TmpCol1 = $DatasCopy[$n-1][1] + $TmpCol2 = $DatasCopy[$n-1][2] + $TmpCol3 = $DatasCopy[$n-1][3] + $TmpCol4 = $DatasCopy[$n-1][4] + + $DatasCopy[$n-1][0] = $DatasCopy[$n][0] + $DatasCopy[$n-1][1] = $DatasCopy[$n][1] + $DatasCopy[$n-1][2] = $DatasCopy[$n][2] + $DatasCopy[$n-1][3] = $DatasCopy[$n][3] + $DatasCopy[$n-1][4] = $DatasCopy[$n][4] + + $DatasCopy[$n][0] = $TmpCol0 + $DatasCopy[$n][1] = $TmpCol1 + $DatasCopy[$n][2] = $TmpCol2 + $DatasCopy[$n][3] = $TmpCol3 + $DatasCopy[$n][4] = $TmpCol4 + EndIf + EndIf + Next + EndIf + + ;Bubble Sort + For $x = 1 To $ServerNum Step 1 + For $y = 1 To $ServerNum -1 Step 1 + ; Sorting by: Current + Watting / Limit + If ($DatasCopy[$y-1][3]+$DatasCopy[$y-1][4])/$DatasCopy[$y-1][2] > ($DatasCopy[$y][3]+$DatasCopy[$y][4])/$DatasCopy[$y][2] Then + $TmpCol0 = $DatasCopy[$y-1][0] + $TmpCol1 = $DatasCopy[$y-1][1] + $TmpCol2 = $DatasCopy[$y-1][2] + $TmpCol3 = $DatasCopy[$y-1][3] + $TmpCol4 = $DatasCopy[$y-1][4] + + $DatasCopy[$y-1][0] = $DatasCopy[$y][0] + $DatasCopy[$y-1][1] = $DatasCopy[$y][1] + $DatasCopy[$y-1][2] = $DatasCopy[$y][2] + $DatasCopy[$y-1][3] = $DatasCopy[$y][3] + $DatasCopy[$y-1][4] = $DatasCopy[$y][4] + + $DatasCopy[$y][0] = $TmpCol0 + $DatasCopy[$y][1] = $TmpCol1 + $DatasCopy[$y][2] = $TmpCol2 + $DatasCopy[$y][3] = $TmpCol3 + $DatasCopy[$y][4] = $TmpCol4 + EndIf + Next + Next + +EndFunc + + + +Func ConnectionEnum($strServer, $strShare) + Ping($strServer, 1000) + If @Error Then Return -1 + Local $Ret = _Net_Share_ConnectionEnum("\\" & $strServer, $strShare) + If @Error Then + Return -1 + Else + If IsArray($Ret) Then + Return $Ret[0][0] + Else + Return -1 + EndIf + EndIf +EndFunc + + + +Func WarningAction($ErrMsg="") + If $Action == "0" Then Return + Local $iDiff + $LastErrTime = IniRead($IniFile, "Warning", "LastErrTime", "") + $iDiff = _DateDiff("s", $LastErrTime, _NowCalc()) + If @Error Then + AppendText($idError, ">>> Get Local Time Failed !" &@CRLF) + AppendLogs('ERR', ">>> Get Local Time Failed !") + Return + EndIf + If $iDiff < $Interval Then Return + If Not FileExists(@ScriptDir&"\"&$Interface) Then + AppendText($idError, ">>> Missing Warning Interface !" &@CRLF) + AppendLogs('ERR', ">>> Missing Warning Interface !") + Return + EndIf + ;ShellExecute(@ScriptDir&"\"&$Interface, $WarningID &" "& $ErrMsg, "", "open") + ShellExecute(@ScriptDir&"\"&$Interface, $WarningID &" "& $ErrMsg, "", "open", @SW_HIDE) + Local $iRtn + $iRtn = IniWrite($IniFile, "Warning", "LastErrTime", _NowCalc()) + If $iRtn = 0 Then + AppendText($idError, ">>> Record LastErrTime Failed !" &@CRLF) + AppendLogs('ERR', ">>> Record LastErrTime Failed !") + EndIf + +EndFunc + + + +Func SearchStringInFile($File="", $StrX="") + Local $Content = "", $Err = "" + If $File = "" Then Return False + If $StrX = "" Then Return False + Local $fOpen = FileOpen($File) + If $fOpen = -1 Then + FileClose($fOpen) + $Err = "Open File Error: " &$File + AppendText($idError, $Err &@CRLF) + AppendLogs('ERR', $Err) + Return False + EndIf + $Content = FileRead($fOpen) + FileClose($fOpen) + If $Content = "" Then Return False + If StringInStr($Content, $StrX) Then + Return True + Else + Return False + EndIf +EndFunc + + + +Func DeleteOldReplyFile($fsFile) + Local $FileTime, $DiffTime + ;Local $NowTime = @YEAR&'/'&@MON&'/'&@MDAY&' '&@HOUR&':'&@MIN&':'&@SEC + + $FileTime = FileGetTime($fsFile, 0, 1) + $FileTime = StringLeft($FileTime,4)&'/'&StringMid($FileTime,5,2)&'/'&StringMid($FileTime,7,2) _ + & ' ' & StringMid($FileTime,9,2)&':'&StringMid($FileTime,11,2)&':'&StringMid($FileTime,13,2) + $DiffTime = _DateDiff("n", $FileTime, _NowCalc()) + ;~~~~~Delete Files Which Modified Time Over Specified Minutes. + ;ConsoleWrite($RRR_List[$k] &@TAB& $FileTime &@TAB& $DiffTime &@CRLF) + + If $DiffTime > $TimeoutMinutes Then + FileDelete($fsFile) + AppendText($idMessage, "Delete File: " & $fsFile &" File Time: "& $FileTime &@CRLF) + AppendLogs('LOG', "Delete File: " & $fsFile &" File Time: "& $FileTime) + Return + EndIf +EndFunc + + + +Func AppendText($hCtrl, $Text) + Local $Lines + $Lines = _GUICtrlEdit_GetLineCount($hCtrl) + If $Lines > 500 Then _GUICtrlEdit_SetText($hCtrl, "") + _GUICtrlEdit_AppendText($hCtrl, _NowCalc() &" "& $Text &@CRLF) +EndFunc + + + +Func AppendLogs($LogType, $LogInfo) + If $LogType = 'LOG' Then + $LogFile = $LogFilePath &"\"& @YEAR & @MON & @MDAY & ".LOG" + _FileWriteLog($LogFile, $LogInfo) + EndIf + If $LogType = 'ERR' Then + $ErrFile = $ErrFilePath &"\"& @YEAR & @MON & @MDAY & ".ERR" + _FileWriteLog($ErrFile, $LogInfo) + EndIf +EndFunc + + + +Func CloseAction() + If @Compiled = 0 Then + GUIDelete($idGUI) + Exit + EndIf + + Local $ExitCode = "000000" + Local $Content = InputBox(">>> EXIT <<<", "PASSWORD: "&@CRLF, _ + "", "*", 300, 150, Default, Default, 10, $idGUI) + If $Content == $ExitCode Then + GUIDelete($idGUI) + AppendLogs('LOG', "Password Matches!") + AppendLogs('LOG', $AppFullName & " Exiting ...") + Exit + EndIf +EndFunc + + + +Func QuietExit() + AppendLogs('LOG', "Hot Key Pressed!") + AppendLogs('LOG', $AppFullName & " Exiting ...") + GUIDelete($idGUI) + Exit +EndFunc + + + +Func __Open_Src_Folder() + If FileExists($SrcFolder) Then Run("Explorer.exe " & $SrcFolder) +EndFunc + + + +Func __Open_Rst_Folder() + If FileExists($RstFolder) Then Run("Explorer.exe " & $RstFolder) +EndFunc + + + +Func __Open_List_Folder() + If FileExists($ListFolder) Then Run("Explorer.exe " & $ListFolder) +EndFunc + + + +Func __Open_App_Folder() + Run("Explorer.exe " & @ScriptDir) +EndFunc + + + +Func _ReduceMemory($i_PID = -1) + If $i_PID <> -1 Then + Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID) + Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0]) + DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0]) + Else + Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1) + EndIf + + Return $ai_Return[0] +EndFunc + + diff --git a/LoadBalanceSystem.exe b/LoadBalanceSystem.exe new file mode 100644 index 0000000..c15d01e Binary files /dev/null and b/LoadBalanceSystem.exe differ diff --git a/LoadBalanceSystem.ini b/LoadBalanceSystem.ini new file mode 100644 index 0000000..18f9f5b --- /dev/null +++ b/LoadBalanceSystem.ini @@ -0,0 +1,2 @@ +[Warning] +LastErrTime=2020/08/30 00:32:00