[R] Communication inter programmes

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [R] Communication inter programmes

#21

Message 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
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [R] Communication inter programmes

#22

Message 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
Fichiers joints
echanges.ini
(228 Octets) Téléchargé 93 fois
Serveur.au3
(15.34 Kio) Téléchargé 99 fois
Client.au3
(15.34 Kio) Téléchargé 84 fois
Répondre