init commit

This commit is contained in:
r0n1n7an 2025-08-21 16:38:17 +08:00
commit 2695b41399
9 changed files with 1050 additions and 0 deletions

149
FileList/FileList.au3 Normal file
View File

@ -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 <File.au3>
#Include <String.au3>
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

BIN
FileList/FileList.exe Normal file

Binary file not shown.

70
FileList/FileList.ini Normal file
View File

@ -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

BIN
FileList/ShowConsole.exe Normal file

Binary file not shown.

View File

@ -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

BIN
LB.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

810
LoadBalanceSystem.au3 Normal file
View File

@ -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 <Date.au3>
#Include <Math.au3>
#Include <File.au3>
#Include <Array.au3>
#Include <NetShare.au3>
#Include <Constants.au3>
#Include <GuiEdit.au3>
#Include <EditConstants.au3>
#Include <StaticConstants.au3>
#Include <GuiListBox.au3>
#Include <GuiConstantsEx.au3>
#Include <WindowsConstants.au3>
#Include <NetShare.au3>
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

BIN
LoadBalanceSystem.exe Normal file

Binary file not shown.

2
LoadBalanceSystem.ini Normal file
View File

@ -0,0 +1,2 @@
[Warning]
LastErrTime=2020/08/30 00:32:00