Je suis donc parti sur un projet avec 1 client et 1 serveur.
Ils communiquent entre eux via un fichier INI :
[PROCEDURE]
Sequence=ACD.EXE_OFF,PAUSE_5,ACD.EXE_ON,PAUSE_5,BANDEAUX_OK
Etape=-1
Erreur=0
[ACTIONS]
Action_1=ACD.EXE_OFF
Action_2=PAUSE_5
Action_3=ACD.EXE_ON
Action_4=PAUSE_5
Action_5=BANDEAUX_OK
Sequence=ACD.EXE_OFF,PAUSE_5,ACD.EXE_ON,PAUSE_5,BANDEAUX_OK
Etape=-1
Erreur=0
[ACTIONS]
Action_1=ACD.EXE_OFF
Action_2=PAUSE_5
Action_3=ACD.EXE_ON
Action_4=PAUSE_5
Action_5=BANDEAUX_OK
Sequence= Liste des actions a exécuter par le serveur
Etape= Etape en cours (-1 si le client à la main, 0 si c'est au serveur à prendre la main, x pour chacune des étapes, 98 pour la fin de la procédure côté serveur, 99 pour la fin côté client)
Erreur= Passe à 1 si erreur détectée dans l'exécution
[ACTIONS]
Action1: Première action a exécuter
Action[n]..
Les logs se font dans un fichier txt.
Je suis parti sur un code unique entre le fichier client et serveur. Au lancement, suivant le nom du fichier (client.exe ou serveur.exe), les actions sont différentes. J'ai fait cela pour pourvoir avoir éventuellement un ordre manuel du serveur vers le client et ne pas avoir tout à réécrire dans l'autre sens.
Voici mon code :
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\..\..\Autoit - Icones_encrypted\TerreSouris.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; INCLUDES
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <Array.au3>
#include <ButtonConstants.au3>
#include <Date.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiStatusBar.au3>
#include <ScrollBarConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
; DESCRIPTIF SCRIPT
; MODELE DE SCRIPT : 2.27
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$script_titre="MODULE"
$script_desc="Module de communication inter-PC"
$auteur="BM"
$maj="09/09/19" ; MES :
$ver="1.01"
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; VARIABLES
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Global $fichier_logs_lignes ; Contenu du fichier logs
Global $fichier_logs_lignes_ex ; COntenu précédent du fichier logs
Global $fichier_ini=@ScriptDir & "\echanges.ini" ; Fichier INI
Global $fichier_logs=@ScriptDir & "\logs.txt" ; Fichier logs
$edit_ex="" ; Contenu du champ Logs
$derniere_action="" ; Dernière action
$erreur=0 ; Flag erreur
; Paramètres suivant que le nom du programme soit CLient ou Serveur
If StringLeft(@ScriptName,7)="Serveur" then
; Flag client (0) ou Serveur (1)
$serveur=1
; Titre de la fenêtre du programme
$script_titre="SERVEUR"
; Poisition de la fenêtre du programme (en bas à droite de l'écran)
$x=@DesktopWidth -370
$y=@DesktopHeight-500
Else
; Flag client (0) ou Serveur (1)
$serveur=0
; Titre de la fenêtre du programme
$script_titre="CLIENT"
; Position de la fenêtre du programme (au milieu de l'écran)
$x=-1
$y=-1
EndIf
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; Ajoute le N° de version du programme au titre de la fenêtre
$nom_fenetre_gui=$script_titre & " - v." & $ver
; GUI PRINCIPALE
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#Region ### START Koda GUI section ### Form=x:\dropbox\developpement\autoit - aqui_encrypted\acd - reboot\4.13 dev (chat)\module.kxf
Global $Form1 = GUICreate($nom_fenetre_gui, 338, 404,$x, $y)
Global $MenuItem1 = GUICtrlCreateMenu("&Action")
Global $MenuQuitter = GUICtrlCreateMenuItem("Quitter", $MenuItem1)
Global $MenuAide = GUICtrlCreateMenu("?")
Global $MenuApropos = GUICtrlCreateMenuItem("A propos de...", $MenuAide)
Global $Group_fonctions = GUICtrlCreateGroup(" FONCTIONS ", 8, 8, 321, 113)
Global $Btn_f1 = GUICtrlCreateButton("F1", 16, 24, 25, 25)
Global $Label_f1 = GUICtrlCreateLabel("", 48, 30, 276, 17)
Global $Btn_f2 = GUICtrlCreateButton("F2", 16, 56, 25, 25)
Global $Label_f2 = GUICtrlCreateLabel("", 48, 62, 276, 17)
Global $Btn_f3 = GUICtrlCreateButton("F3", 16, 88, 25, 25)
Global $Label_f3 = GUICtrlCreateLabel("", 48, 94, 276, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $Group_logs = GUICtrlCreateGroup(" LOGS ", 8, 128, 321, 225)
Global $Edit_logs = GUICtrlCreateEdit("", 16, 144, 305, 201)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $StatusBar1 = _GUICtrlStatusBar_Create($Form1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;Global $Form1 = GUICreate($nom_fenetre_gui, 296, 266,$x, $y)
; StatusBar simple
_GUICtrlStatusBar_SetSimple($StatusBar1)
; Supprime le clignotement du curseur
GUICtrlSetState(-1, $GUI_FOCUS)
; Affichage et blocage des boutons selon client ou serveur
If $serveur=1 then
; Désactive boutons
GUICtrlSetState($Btn_f1, $GUI_DISABLE)
GUICtrlSetState($Btn_f2, $GUI_DISABLE)
GUICtrlSetState($Btn_f3, $GUI_DISABLE)
f_insertion_logs("XXXXXXXXXXXXXXXXXXXXXXXXXX")
f_insertion_logs("SRV > Démarrage serveur...")
Else
; Fonctions boutons
GUICtrlSetData($Label_f1,"REDEMARRAGE ACD RAPIDE")
GUICtrlSetData($Label_f2,"REBOOT ACD COMPLET")
GUICtrlSetData($Label_f3,"REGISTRER SNOM")
GUICtrlSetState($Btn_f1, $GUI_ENABLE)
GUICtrlSetState($Btn_f2, $GUI_ENABLE)
GUICtrlSetState($Btn_f3, $GUI_ENABLE)
f_insertion_logs("SRV > Démarrage client...")
EndIf
; RAZ Champs INI
f_ecriture_ini("PROCEDURE","Sequence","")
f_ecriture_ini("PROCEDURE","Etape","")
f_ecriture_ini("PROCEDURE","Erreur","")
f_delete_ini_actions()
; BOUCLE GUI
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
While 1
$nMsg = GUIGetMsg()
; Affichage des logs
f_lecture_logs()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $MenuQuitter
Exit
Case $MenuApropos
MsgBox(262144,$script_titre,StringUpper($script_titre) & @CRLF & $script_desc & @CRLF & @CRLF & "v. " & $ver & " (" & $maj & ")" & @CRLF & @CRLF & $auteur)
Case $Btn_f1
; Récupère nom de la procédure en cours
$procedure_en_cours=GUICtrlRead($Label_f1)
; MAJ INI (étape -1 : Action côté client, ^pas serveur)
f_ecriture_ini("PROCEDURE","Etape",-1)
; Actions correspondants à la procédure
$valeur="ACD.EXE_OFF,PAUSE_5,ACD.EXE_ON,PAUSE_5,BANDEAUX_OK"
; Logs
f_insertion_logs("CLI > " & $procedure_en_cours)
; MAJ INI (Séquence)
f_ecriture_ini("PROCEDURE","Sequence",$valeur)
; MAJ INI (Actions)
f_ecriture_ini_actions($valeur)
; Logs
f_insertion_logs("CLI > Attente action serveur...")
Sleep(2000)
; MAJ INI (pour début action serveur)
f_ecriture_ini("PROCEDURE","Etape",0)
Sleep(2000)
Case $Btn_f2
Case $Btn_f3
EndSwitch
; Serveur
If $serveur=1 Then
$etape=IniRead($fichier_ini,"PROCEDURE","Etape","")
If ($etape="" or $etape=-1) then ContinueLoop
$tab_actions_en_cours=IniReadSection($fichier_ini,"ACTIONS")
Switch $etape
Case 0
$etape=$etape+1
f_insertion_logs("SRV > Début actions")
f_ecriture_ini("PROCEDURE","Etape",$etape)
Sleep(2000)
Case UBound($tab_actions_en_cours)
f_insertion_logs("SRV > Fin procédure")
f_ecriture_ini("PROCEDURE","Etape","98")
Case 98
ContinueLoop
Case 99
ContinueLoop
Case Else
;_ArrayDisplay($tab_actions_en_cours)
;$etape=$etape+1
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $etape = ' & $etape & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$action_en_cours=IniRead($fichier_ini,"ACTIONS","Action" & $etape,"")
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $action_en_cours = ' & $action_en_cours & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
f_insertion_logs("SRV > " & "Action" & $etape & " > " & $action_en_cours)
Switch $action_en_cours
Case "ACD.EXE_OFF"
f_insertion_logs("SRV > Fermeture programme ACD.exe en cours...")
;ProcessClose("acd.exe")
If @error Then
f_insertion_logs("SRV > ERREUR " & $etape)
f_insertion_logs("ERREUR : FAIRE LA PROCEDURE MANUELLEMENT")
IniWrite($fichier_ini,"PROCEDURE","Erreur","1")
$erreur=1
Else
$etape=$etape+1
f_insertion_logs("SRV > Programme ACD.exe fermé")
f_ecriture_ini("PROCEDURE","Etape",$etape)
EndIf
Sleep(2000)
Case "PAUSE_5"
f_insertion_logs("SRV > Pause 5 secondes...")
Sleep(5000)
$etape=$etape+1
f_ecriture_ini("PROCEDURE","Etape",$etape)
Sleep(2000)
Case "ACD.EXE_ON"
f_insertion_logs("SRV > Lancement programme ACD.exe en cours...")
;Run("acd.exe")
If @error Then
f_insertion_logs("SRV > ERREUR " & $etape)
f_insertion_logs("ERREUR : FAIRE LA PROCEDURE MANUELLEMENT")
IniWrite($fichier_ini,"PROCEDURE","Erreur","1")
$erreur=1
Else
$etape=$etape+1
f_insertion_logs("SRV > Programme ACD.exe lancé")
f_ecriture_ini("PROCEDURE","Etape",$etape)
EndIf
Sleep(2000)
Case "BANDEAUX_OK"
f_insertion_logs("SRV > Relance bandeaux possible")
$etape=$etape+1
f_ecriture_ini("PROCEDURE","Etape",$etape)
Sleep(2000)
EndSwitch
EndSwitch
EndIf
If $serveur=0 Then
$etape=IniRead($fichier_ini,"PROCEDURE","Etape","")
If $etape<>98 then ContinueLoop
f_insertion_logs("CLI > Procédure terminée")
Sleep(2000)
f_ecriture_ini("PROCEDURE","Etape","99")
EndIf
Sleep(50)
WEnd
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_ecriture_ini($ini_section,$ini_cle,$ini_valeur)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ini_section = ' & $ini_section & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ini_cle = ' & $ini_cle & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ini_valeur = ' & $ini_valeur & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
IniWrite($fichier_ini,$ini_section,$ini_cle,$ini_valeur)
If IniRead($fichier_ini,$ini_section,$ini_cle,"")<>$ini_valeur Then
f_insertion_logs("MAJ INI > ERREUR (" & $ini_cle & ")")
f_insertion_logs("ERREUR : FAIRE LA PROCEDURE MANUELLEMENT")
IniWrite($fichier_ini,"PROCEDURE","Erreur","1")
$erreur=1
EndIf
Return
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_insertion_logs($msg)
; Horodatage
$msg=@MDAY & "/" & @MON & " " & @HOUR & ":" & @MIN & " " & $msg
; Création et ouverture fichier log
$fichier_logs_ecriture = FileOpen($fichier_logs, 1)
; Vérification ouverture fichier log
If $fichier_logs_ecriture = -1 Then
MsgBox(0, "ERREUR", "Ouverture du fichier impossible : " & $fichier_logs,15)
Exit
EndIf
; Ecriture dans fichier
$ecriture_ok=FileWrite($fichier_logs_ecriture,$msg & @CRLF)
If $ecriture_ok=0 Then
MsgBox(262144+16,$script_titre,"Ecriture log impossible, merci de reessayer",15)
EndIf
; Fermeture fichier
FileClose($fichier_logs_ecriture)
f_lecture_logs()
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_lecture_logs()
; Raz $fichier_logs_lignes
$fichier_logs_lignes=""
; Ouvre fichier chat en lecture seule
$fichier_logs_lecture = FileOpen($fichier_logs,0)
$fichier_logs_lignes = FileRead($fichier_logs_lecture)
If $fichier_logs_lignes<>$fichier_logs_lignes_ex then
; Boucle ligne par ligne
While 1
Local $fichier_ligne = FileReadLine($fichier_logs_lecture)
If @error = -1 Then ExitLoop
$fichier_logs_lignes=$fichier_logs_lignes & $fichier_ligne & @CRLF
; Récup dernière action
If $fichier_ligne<>"" Then $derniere_action=StringTrimLeft($fichier_ligne,14)
WEnd
; Affichage si MAJ
If $fichier_logs_lignes<>$edit_ex Then
GUICtrlSetData($Edit_logs,$fichier_logs_lignes)
_GUICtrlEdit_Scroll($Edit_logs, $SB_SCROLLCARET)
$edit_ex=$fichier_logs_lignes
EndIf
$fichier_logs_lignes_ex=$fichier_logs_lignes
EndIf
FileClose($fichier_logs_lecture)
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_ecriture_ini_actions($actions)
f_delete_ini_actions()
$tab_actions_new=StringSplit($actions,",")
;_ArrayDisplay($tab_actions_new)
; Créations clés actions
For $i=1 to UBound($tab_actions_new)-1
f_ecriture_ini("ACTIONS","Action" & $i,$tab_actions_new[$i])
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $tab_actions_new[$i] = ' & $tab_actions_new[$i] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Next
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_delete_ini_actions()
$tab_actions_ex=IniReadSection($fichier_ini,"ACTIONS")
;_ArrayDisplay($tab_actions_ex)
For $i=1 to UBound($tab_actions_ex)-1
IniDelete($fichier_ini,"ACTIONS",$tab_actions_ex[$i][0])
Next
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#AutoIt3Wrapper_Icon=..\..\..\Autoit - Icones_encrypted\TerreSouris.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
; INCLUDES
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <Array.au3>
#include <ButtonConstants.au3>
#include <Date.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <GuiStatusBar.au3>
#include <ScrollBarConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
; DESCRIPTIF SCRIPT
; MODELE DE SCRIPT : 2.27
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$script_titre="MODULE"
$script_desc="Module de communication inter-PC"
$auteur="BM"
$maj="09/09/19" ; MES :
$ver="1.01"
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; VARIABLES
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Global $fichier_logs_lignes ; Contenu du fichier logs
Global $fichier_logs_lignes_ex ; COntenu précédent du fichier logs
Global $fichier_ini=@ScriptDir & "\echanges.ini" ; Fichier INI
Global $fichier_logs=@ScriptDir & "\logs.txt" ; Fichier logs
$edit_ex="" ; Contenu du champ Logs
$derniere_action="" ; Dernière action
$erreur=0 ; Flag erreur
; Paramètres suivant que le nom du programme soit CLient ou Serveur
If StringLeft(@ScriptName,7)="Serveur" then
; Flag client (0) ou Serveur (1)
$serveur=1
; Titre de la fenêtre du programme
$script_titre="SERVEUR"
; Poisition de la fenêtre du programme (en bas à droite de l'écran)
$x=@DesktopWidth -370
$y=@DesktopHeight-500
Else
; Flag client (0) ou Serveur (1)
$serveur=0
; Titre de la fenêtre du programme
$script_titre="CLIENT"
; Position de la fenêtre du programme (au milieu de l'écran)
$x=-1
$y=-1
EndIf
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; Ajoute le N° de version du programme au titre de la fenêtre
$nom_fenetre_gui=$script_titre & " - v." & $ver
; GUI PRINCIPALE
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#Region ### START Koda GUI section ### Form=x:\dropbox\developpement\autoit - aqui_encrypted\acd - reboot\4.13 dev (chat)\module.kxf
Global $Form1 = GUICreate($nom_fenetre_gui, 338, 404,$x, $y)
Global $MenuItem1 = GUICtrlCreateMenu("&Action")
Global $MenuQuitter = GUICtrlCreateMenuItem("Quitter", $MenuItem1)
Global $MenuAide = GUICtrlCreateMenu("?")
Global $MenuApropos = GUICtrlCreateMenuItem("A propos de...", $MenuAide)
Global $Group_fonctions = GUICtrlCreateGroup(" FONCTIONS ", 8, 8, 321, 113)
Global $Btn_f1 = GUICtrlCreateButton("F1", 16, 24, 25, 25)
Global $Label_f1 = GUICtrlCreateLabel("", 48, 30, 276, 17)
Global $Btn_f2 = GUICtrlCreateButton("F2", 16, 56, 25, 25)
Global $Label_f2 = GUICtrlCreateLabel("", 48, 62, 276, 17)
Global $Btn_f3 = GUICtrlCreateButton("F3", 16, 88, 25, 25)
Global $Label_f3 = GUICtrlCreateLabel("", 48, 94, 276, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $Group_logs = GUICtrlCreateGroup(" LOGS ", 8, 128, 321, 225)
Global $Edit_logs = GUICtrlCreateEdit("", 16, 144, 305, 201)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $StatusBar1 = _GUICtrlStatusBar_Create($Form1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;Global $Form1 = GUICreate($nom_fenetre_gui, 296, 266,$x, $y)
; StatusBar simple
_GUICtrlStatusBar_SetSimple($StatusBar1)
; Supprime le clignotement du curseur
GUICtrlSetState(-1, $GUI_FOCUS)
; Affichage et blocage des boutons selon client ou serveur
If $serveur=1 then
; Désactive boutons
GUICtrlSetState($Btn_f1, $GUI_DISABLE)
GUICtrlSetState($Btn_f2, $GUI_DISABLE)
GUICtrlSetState($Btn_f3, $GUI_DISABLE)
f_insertion_logs("XXXXXXXXXXXXXXXXXXXXXXXXXX")
f_insertion_logs("SRV > Démarrage serveur...")
Else
; Fonctions boutons
GUICtrlSetData($Label_f1,"REDEMARRAGE ACD RAPIDE")
GUICtrlSetData($Label_f2,"REBOOT ACD COMPLET")
GUICtrlSetData($Label_f3,"REGISTRER SNOM")
GUICtrlSetState($Btn_f1, $GUI_ENABLE)
GUICtrlSetState($Btn_f2, $GUI_ENABLE)
GUICtrlSetState($Btn_f3, $GUI_ENABLE)
f_insertion_logs("SRV > Démarrage client...")
EndIf
; RAZ Champs INI
f_ecriture_ini("PROCEDURE","Sequence","")
f_ecriture_ini("PROCEDURE","Etape","")
f_ecriture_ini("PROCEDURE","Erreur","")
f_delete_ini_actions()
; BOUCLE GUI
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
While 1
$nMsg = GUIGetMsg()
; Affichage des logs
f_lecture_logs()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $MenuQuitter
Exit
Case $MenuApropos
MsgBox(262144,$script_titre,StringUpper($script_titre) & @CRLF & $script_desc & @CRLF & @CRLF & "v. " & $ver & " (" & $maj & ")" & @CRLF & @CRLF & $auteur)
Case $Btn_f1
; Récupère nom de la procédure en cours
$procedure_en_cours=GUICtrlRead($Label_f1)
; MAJ INI (étape -1 : Action côté client, ^pas serveur)
f_ecriture_ini("PROCEDURE","Etape",-1)
; Actions correspondants à la procédure
$valeur="ACD.EXE_OFF,PAUSE_5,ACD.EXE_ON,PAUSE_5,BANDEAUX_OK"
; Logs
f_insertion_logs("CLI > " & $procedure_en_cours)
; MAJ INI (Séquence)
f_ecriture_ini("PROCEDURE","Sequence",$valeur)
; MAJ INI (Actions)
f_ecriture_ini_actions($valeur)
; Logs
f_insertion_logs("CLI > Attente action serveur...")
Sleep(2000)
; MAJ INI (pour début action serveur)
f_ecriture_ini("PROCEDURE","Etape",0)
Sleep(2000)
Case $Btn_f2
Case $Btn_f3
EndSwitch
; Serveur
If $serveur=1 Then
$etape=IniRead($fichier_ini,"PROCEDURE","Etape","")
If ($etape="" or $etape=-1) then ContinueLoop
$tab_actions_en_cours=IniReadSection($fichier_ini,"ACTIONS")
Switch $etape
Case 0
$etape=$etape+1
f_insertion_logs("SRV > Début actions")
f_ecriture_ini("PROCEDURE","Etape",$etape)
Sleep(2000)
Case UBound($tab_actions_en_cours)
f_insertion_logs("SRV > Fin procédure")
f_ecriture_ini("PROCEDURE","Etape","98")
Case 98
ContinueLoop
Case 99
ContinueLoop
Case Else
;_ArrayDisplay($tab_actions_en_cours)
;$etape=$etape+1
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $etape = ' & $etape & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$action_en_cours=IniRead($fichier_ini,"ACTIONS","Action" & $etape,"")
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $action_en_cours = ' & $action_en_cours & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
f_insertion_logs("SRV > " & "Action" & $etape & " > " & $action_en_cours)
Switch $action_en_cours
Case "ACD.EXE_OFF"
f_insertion_logs("SRV > Fermeture programme ACD.exe en cours...")
;ProcessClose("acd.exe")
If @error Then
f_insertion_logs("SRV > ERREUR " & $etape)
f_insertion_logs("ERREUR : FAIRE LA PROCEDURE MANUELLEMENT")
IniWrite($fichier_ini,"PROCEDURE","Erreur","1")
$erreur=1
Else
$etape=$etape+1
f_insertion_logs("SRV > Programme ACD.exe fermé")
f_ecriture_ini("PROCEDURE","Etape",$etape)
EndIf
Sleep(2000)
Case "PAUSE_5"
f_insertion_logs("SRV > Pause 5 secondes...")
Sleep(5000)
$etape=$etape+1
f_ecriture_ini("PROCEDURE","Etape",$etape)
Sleep(2000)
Case "ACD.EXE_ON"
f_insertion_logs("SRV > Lancement programme ACD.exe en cours...")
;Run("acd.exe")
If @error Then
f_insertion_logs("SRV > ERREUR " & $etape)
f_insertion_logs("ERREUR : FAIRE LA PROCEDURE MANUELLEMENT")
IniWrite($fichier_ini,"PROCEDURE","Erreur","1")
$erreur=1
Else
$etape=$etape+1
f_insertion_logs("SRV > Programme ACD.exe lancé")
f_ecriture_ini("PROCEDURE","Etape",$etape)
EndIf
Sleep(2000)
Case "BANDEAUX_OK"
f_insertion_logs("SRV > Relance bandeaux possible")
$etape=$etape+1
f_ecriture_ini("PROCEDURE","Etape",$etape)
Sleep(2000)
EndSwitch
EndSwitch
EndIf
If $serveur=0 Then
$etape=IniRead($fichier_ini,"PROCEDURE","Etape","")
If $etape<>98 then ContinueLoop
f_insertion_logs("CLI > Procédure terminée")
Sleep(2000)
f_ecriture_ini("PROCEDURE","Etape","99")
EndIf
Sleep(50)
WEnd
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_ecriture_ini($ini_section,$ini_cle,$ini_valeur)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ini_section = ' & $ini_section & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ini_cle = ' & $ini_cle & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ini_valeur = ' & $ini_valeur & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
IniWrite($fichier_ini,$ini_section,$ini_cle,$ini_valeur)
If IniRead($fichier_ini,$ini_section,$ini_cle,"")<>$ini_valeur Then
f_insertion_logs("MAJ INI > ERREUR (" & $ini_cle & ")")
f_insertion_logs("ERREUR : FAIRE LA PROCEDURE MANUELLEMENT")
IniWrite($fichier_ini,"PROCEDURE","Erreur","1")
$erreur=1
EndIf
Return
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_insertion_logs($msg)
; Horodatage
$msg=@MDAY & "/" & @MON & " " & @HOUR & ":" & @MIN & " " & $msg
; Création et ouverture fichier log
$fichier_logs_ecriture = FileOpen($fichier_logs, 1)
; Vérification ouverture fichier log
If $fichier_logs_ecriture = -1 Then
MsgBox(0, "ERREUR", "Ouverture du fichier impossible : " & $fichier_logs,15)
Exit
EndIf
; Ecriture dans fichier
$ecriture_ok=FileWrite($fichier_logs_ecriture,$msg & @CRLF)
If $ecriture_ok=0 Then
MsgBox(262144+16,$script_titre,"Ecriture log impossible, merci de reessayer",15)
EndIf
; Fermeture fichier
FileClose($fichier_logs_ecriture)
f_lecture_logs()
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_lecture_logs()
; Raz $fichier_logs_lignes
$fichier_logs_lignes=""
; Ouvre fichier chat en lecture seule
$fichier_logs_lecture = FileOpen($fichier_logs,0)
$fichier_logs_lignes = FileRead($fichier_logs_lecture)
If $fichier_logs_lignes<>$fichier_logs_lignes_ex then
; Boucle ligne par ligne
While 1
Local $fichier_ligne = FileReadLine($fichier_logs_lecture)
If @error = -1 Then ExitLoop
$fichier_logs_lignes=$fichier_logs_lignes & $fichier_ligne & @CRLF
; Récup dernière action
If $fichier_ligne<>"" Then $derniere_action=StringTrimLeft($fichier_ligne,14)
WEnd
; Affichage si MAJ
If $fichier_logs_lignes<>$edit_ex Then
GUICtrlSetData($Edit_logs,$fichier_logs_lignes)
_GUICtrlEdit_Scroll($Edit_logs, $SB_SCROLLCARET)
$edit_ex=$fichier_logs_lignes
EndIf
$fichier_logs_lignes_ex=$fichier_logs_lignes
EndIf
FileClose($fichier_logs_lecture)
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_ecriture_ini_actions($actions)
f_delete_ini_actions()
$tab_actions_new=StringSplit($actions,",")
;_ArrayDisplay($tab_actions_new)
; Créations clés actions
For $i=1 to UBound($tab_actions_new)-1
f_ecriture_ini("ACTIONS","Action" & $i,$tab_actions_new[$i])
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $tab_actions_new[$i] = ' & $tab_actions_new[$i] & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Next
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Func f_delete_ini_actions()
$tab_actions_ex=IniReadSection($fichier_ini,"ACTIONS")
;_ArrayDisplay($tab_actions_ex)
For $i=1 to UBound($tab_actions_ex)-1
IniDelete($fichier_ini,"ACTIONS",$tab_actions_ex[$i][0])
Next
EndFunc
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
En postant ce message, je me disais qu'il serait peut-être mieux si chaque action était préfixée par "CLI>" ou "SRV>" pour pouvoir avoir une séquence qui comporte des actions des 2 côtés. Qu'en pensez-vous ?
Merci d'avance pour votre aide.
Cordialement.
BM