Page 2 sur 2

Re: [R] Communication inter programmes

Posté : lun. 16 sept. 2019 10:51
par scorp84
Bonjour à tous,

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
[PROCEDURE]
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
Est-ce que cela vous semble correct ?

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

Re: [R] Communication inter programmes

Posté : lun. 16 sept. 2019 14:02
par scorp84
Bonjour à tous,

Voici mon 2ème essai avec des actions pouvant être effectuées des 2 côtés (prefixe "CLI_" ou "SRV_" devant l'action à réaliser) :

#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",0)

                        ; Actions correspondants à la procédure
                        $valeur="SRV_ACD.EXE_OFF,SRV_PAUSE_5,SRV_ACD.EXE_ON,SRV_PAUSE_5,CLI_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)

                        Sleep(2000)

                        ; MAJ INI (pour début action serveur)
                        f_ecriture_ini("PROCEDURE","Etape",1)

                        Sleep(2000)


                Case $Btn_f2

                        ; Récupère nom de la procédure en cours
                        $procedure_en_cours=GUICtrlRead($Label_f2)

                        ; MAJ INI (étape -1 : Action côté client, ^pas serveur)
                        f_ecriture_ini("PROCEDURE","Etape",0)

                        ; Actions correspondants à la procédure
                        $valeur="SRV_ACD.EXE_OFF,SRV_PAUSE_5,SRV_IPBX_OFF,SRV_PAUSE_5,SRV_REBOOT_ON,CLI_ATT_REBOOT_SRV,SRV_REBOOT_OK,CLI_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)

                        Sleep(2000)

                        ; MAJ INI (pour début action serveur)
                        f_ecriture_ini("PROCEDURE","Etape",1)

                        Sleep(2000)

                Case $Btn_f3

                        $num_poste=InputBox("N° POSTE","Saisir le numéro du poste (ex. : 8924)")

                        If @error Then
                                MsgBox(262144+16,$script_titre,"Le numéro de poste est obligatoire")
                                ContinueLoop
                        EndIf

                        $numerique=_ArrayToString(StringRegExp($num_poste, "(\d{4})", 3), "")

                        If $num_poste<>$numerique then
                                MsgBox(262144+16,$script_titre,"Le numéro de poste doit contenir 4 chiffres (ex. : 8922)")
                                ContinueLoop
                        EndIf

                        If StringLeft($num_poste,2)<>"89" then
                                MsgBox(262144+16,$script_titre,"Le numéro de poste doit commencer par 89 (ex. : 8922)")
                                ContinueLoop
                        EndIf

                        IniWrite($fichier_ini,"TMP","num_poste",$num_poste)

                        ; Récupère nom de la procédure en cours
                        $procedure_en_cours=GUICtrlRead($Label_f3)

                        ; MAJ INI (étape -1 : Action côté client, ^pas serveur)
                        f_ecriture_ini("PROCEDURE","Etape",0)

                        ; Actions correspondants à la procédure
                        $valeur="SRV_REGISTRER_SNOM,CLI_TEL_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)

                        Sleep(2000)

                        ; MAJ INI (pour début action serveur)
                        f_ecriture_ini("PROCEDURE","Etape",1)

                        Sleep(2000)

        EndSwitch

        $etape=IniRead($fichier_ini,"PROCEDURE","Etape","0")

        If $etape=0 then ContinueLoop

        $action_en_cours=IniRead($fichier_ini,"ACTIONS","Action" & $etape,"")

        $module=StringLeft($action_en_cours,3)

        If $serveur=1 And $module<>"SRV" Then ContinueLoop

        If $serveur=0 And $module<>"CLI" Then ContinueLoop

        Switch $action_en_cours

                Case "SRV_ACD.EXE_ON"

                        $programme_nom="c:\bin\acd.exe"

                        $action_etat=run($programme_nom)

                        $action_etat=1 ; TODO : Supprimer après tests

                        If $action_etat=0 Then $erreur=1


                Case "SRV_ACD.EXE_OFF"

                        $process_nom="acd.exe"
                        ProcessClose($process_nom)

                        Sleep(100)

                        $action_etat=ProcessExists($process_nom)

                        $action_etat=0 ; TODO : A supprimer après les tests

                        If $action_etat=1 then $erreur=1


                Case "SRV_IPBX_OFF"

                        $process_nom="ipbx.exe"
                        ProcessClose($process_nom)

                        Sleep(100)

                        $action_etat=ProcessExists($process_nom)

                        $action_etat=0 ; TODO : A supprimer après les tests

                        If $action_etat=1 then $erreur=1


                Case "SRV_PAUSE_5"

                        Sleep(5000)

                        $erreur=0


                Case "SRV_REBOOT_ON"

                        f_insertion_logs($action_en_cours & " > En cours...")

                        $etape=$etape+1

                        f_insertion_logs($action_en_cours & " > OK")

                        f_ecriture_ini("PROCEDURE","Etape",$etape)

                        ;Shutdown(6)

                        Exit

                Case "SRV_REBOOT_OK"

                        Sleep(2000)

                        $erreur=0


                Case "SRV_REGISTRER_SNOM"

                        $num_poste=IniRead($fichier_ini,"TMP","num_poste","")

                        If $num_poste="" then $erreur=1

                        InetGet("http://192.168.1." & StringRight($num_poste,2) & "/ligne_login.htm?REREGISTER:1",1)
                        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : "http://192.168.1." & StringRight($num_poste,2) & "/ligne_login.htm?REREGISTER:1" = ' & "http://192.168.1." & StringRight($num_poste,2) & "/ligne_login.htm?REREGISTER:1" & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

                        f_insertion_logs($action_en_cours & " > Compte 1 OK")

                        Sleep(1000)

                        InetGet("http://192.168.1." & StringRight($num_poste,2) & "/ligne_login.htm?REREGISTER:3",1)
                        ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : "http://192.168.1." & StringRight($num_poste,2) & "/ligne_login.htm?REREGISTER:3" = ' & "http://192.168.1." & StringRight($num_poste,2) & "/ligne_login.htm?REREGISTER:3" & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console

                        f_insertion_logs($action_en_cours & " > Compte 3 OK")

                        Sleep(1000)

                Case "CLI_ATT_REBOOT_SRV"

                        f_insertion_logs($action_en_cours & " > Attente redémarrage serveur...")

                        $erreur=0


                Case "CLI_BANDEAUX_OK"

                        f_insertion_logs($action_en_cours & " > FIN DE LA PROCEDURE")

                        Sleep(2000)

                        MsgBox(262144,$script_titre,"Vous pouvez relancer les bandeaux")


                Case "CLI_TEL_OK"

                        f_insertion_logs($action_en_cours & " > Retester le téléphone")

                        Sleep(2000)

                        MsgBox(262144,$script_titre,"Merci de retester le téléphone")


                Case Else

                        $erreur=1
                        f_insertion_logs($action_en_cours & " > Action inconnue")

        EndSwitch

        If $erreur=1 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($action_en_cours & " > OK")

                f_ecriture_ini("PROCEDURE","Etape",$etape)

        EndIf

        Sleep(100)
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

J'ai simplifié aussi le code qui exécute les actions et j'ai ajouté une section temporaire pour passer des variables d'un module à l'autre.

Qu'en pensez-vous ?

Merci d'avance pour vos conseils et remarques.

Amicalement.

BM