811 lines
26 KiB
AutoIt
811 lines
26 KiB
AutoIt
#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
|
|
|
|
|