FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Gestion d'un système client-serveur. - Page 2 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
Gestion d'un système client-serveur. - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Gestion d'un système client-serveur. - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Gestion d'un système client-serveur. - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Gestion d'un système client-serveur. - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Gestion d'un système client-serveur. - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Gestion d'un système client-serveur. - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Gestion d'un système client-serveur. - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Gestion d'un système client-serveur. - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Gestion d'un système client-serveur. - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Gestion d'un système client-serveur. - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Gestion d'un système client-serveur. - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Gestion d'un système client-serveur. - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Gestion d'un système client-serveur. - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Gestion d'un système client-serveur. - Page 2 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-28%
Le deal à ne pas rater :
-28% Machine à café avec broyeur à grain MELITTA Purista
229.99 € 318.99 €
Voir le deal

 

 Gestion d'un système client-serveur.

Aller en bas 
3 participants
Aller à la page : Précédent  1, 2
AuteurMessage
Pedro

Pedro


Nombre de messages : 1596
Date d'inscription : 19/01/2014

Gestion d'un système client-serveur. - Page 2 Empty
MessageSujet: Gestion d'un système client-serveur.   Gestion d'un système client-serveur. - Page 2 EmptyVen 17 Mai 2024 - 13:27

OK, tout fonctionne maintenant.

Afin de supprimer un enseignant, rien n'indique qu'il faille cliquer sur son ID !!
Lorsque l'on clique sur son nom pour le supprimer, cela ne fonctionne pas.
Un petit point à corriger.

J'ai également relevé une petite erreur à la ligne:

s$ = grid_read$(2001,i%+1,j%)

Il faut remplacer le ';' par une ','.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

Gestion d'un système client-serveur. - Page 2 Empty
MessageSujet: Re: Gestion d'un système client-serveur.   Gestion d'un système client-serveur. - Page 2 EmptyVen 17 Mai 2024 - 14:02

Oui - faute de frappe. J'ai corrigé le ";":
Code:
' test_GestionEleves_Serveur.bas
'
' Ce programme est juste une démo d'un système client/serveur.
' Il prend pour exemple une gestion des élèves d'une école.
' Le serveur gère un fichier des élèves, accédé par des enseignants qui sont les clients.
' Le serveur gère aussi un fichier des enseignants avec leur identification et mot de passe.
'
' Le programme fonctionne à l'aide des fonctions de gestion des boites mail type 2 de KGF.dll.
' le serveur ne peut être lancé qu'en un seul exemplaire sur sa machine.
' Il crée une boite email nommée "GestionEleves_Serveur".
' Tous les clients utilisent cette boite mail pour envoyer des requêtes au serveur.
'
' Chaque client est lancé lui aussi en un seul exemplaire sur sa machine, différente du serveur.
' On nomme client le programme lancé par un enseignant pour communiquer avec le serveur.
' Chaque client crée sa propre boite mail dont le nom inclut l'identification de l'enseignant.
' Ainsi, les boites mail des enseignants sont uniques, eles aussi.
' Elles servent à recevoir les réponses du serveur pour les requêtes des clients.
'
' L'enseignant lance son programme client et entre son identification et son mot de passe.
' Le programme client détermine le nom de la boite mail et vérifie si elle n'est pas déjà active.
' Le client envoir alors une requête LOGIN au serveur, de la façon suivante:
'    LOGIN,idEnseignant,MotDePasseEnseignant,BoiteMailEnseignant
' Le MotDePasseEnseignant est crypté par la fonction Crypt64, et le serveur ne le décrypte pas.
' Le serveur reçoit cette requète dans sa boite mail. Il vérifie alors sans sa liste des
' connexions actives si cet enseignant est déjà connecté. Si oui, il refuse avec le message
'    FAILED
' Sinon, il vérifie dans la liste des enseignants si l'identifiant et le mot de passe sont corrects.
' Si oui, il ajoute l'enseignant dans la liste des connextions actives et confirme avec le message
'    OK
' Sinon, il refuse avec le message
'    FAILED
'
' L'enseignant termine sa session apr une requête LOGOUT du format suivant:
'    LOGOUT,idEnseignant
' Le serveur enlève alors l'enseignant de la liste des enseignants connectés (grid 1003)
' en n'acepte plus aucune requête de sa part.
'
' LE serveur comprend une fonction d'enregistrement des enseignants autorisés. Il mémorise ces données
' dans un fichier GestionEleves_Enseignants.dat, dans lesuel un trouven pour chaque enseignant:
'  Nom
'  Prénom
'  ID
'  Mot de passe (crypté par la fonction Crypt64)


labels()
constantes()
variables()
GUI()
verification()
fichiers()
end

sub labels()
  label close0, close2100
  label NouvelEnseignant, SupprimerEnseignant, SelectEnseignant
  label pwdsecret, ValiderEnseignant, CreerEnseignant, ClickTab,
  label ModifierEnseignant, RemplacerEnseignant
  label TimerEvent
end_sub

sub constantes()
  dim KGFdll$ : KGFdll$ = "KGF.dll"
  dim FichierEnseignants$ : FichierEnseignants$ = "GestionEleves_Enseignants.dat"
  dim EnteteEnseignants$ : EnteteEnseignants$ = "Gestion des Elèves - Enseignants"
  dim mailbox_serveur$ : mailbox_serveur$ = "\\.\mailslot\GestionEleves_Serveur"
  dim MaxEnseignants% : MaxEnseignants% = 100
  dll_on KGFdll$
  dim MachineServeur$ : MachineServeur$ = string$(255," ")
  dim res%
  res% = dll_call1("ComputerName",adr(MachineServeur$))
  MachineServeur$ = trim$(MachineServeur$)
  dim titre$ : titre$ = "Gestion des élèvers - Serveur ("+MachineServeur$+")"
end_sub

sub variables()
  dim s$, i%, j%, p%
  dim mbx_serveur%, pwdSecret%, nom$, prenom$, id$, pwd$, GridSelected%
  dim serveurActif%, ModeOperation%, maxsiz%, nxtsiz%, cnt%, tmo%
  dim NombreRequetesAcceptees%, NombreRequetesRejetees%, nActifs%
end_sub

sub GUI()
  full_space 0 : on_close 0,close0
  caption 0,titre$
  container_tab 1 : full_space 1                       
  tab 1000 : parent 1000,1 : caption 1000,"Connexions"  : on_show 1000,ClickTab
  tab 2000 : parent 2000,1 : caption 2000,"Enseignants"  : on_show 2000,ClickTab
  tab 3000 : parent 3000,1 : caption 3000,"Statistiques" : on_show 3000,ClickTab
 
  GUI_invisibles()
  GUI_Connexions()
  GUI_Enseignants()
  GUI_Statistiques()
end_sub

sub GUI_invisibles()
  dlist 98
  memo 99 : hide 99 : bar_both 99                : ' ce mémo sert à recevoir une requête d'un client
  timer 90 : timer_off 90 : timer_interval 90,500 : on_timer 90,TimerEvent
end_sub

sub GUI_Connexions()
  alpha 1001 : parent 1001,1000 : top 1001,20 : left 1001,100 : font_bold 1001
    font_size 1001,24 : caption 1001,"Le serveur est démarré..."
  alpha 1002 : parent 1002,1000 : top 1002,60 : left 1002,100 : font_bold 1001
  grid 1003 : parent 1003,1000 : top 1003,90
    width 1003,856 : height 1003,height_client(0)-150
    grid_column_fixed 1003,1                                     
    grid_row_fixed 1003,1
    grid_row 1003,MaxEnseignants% + 1
    grid_column 1003,6
    grid_one_column_width 1003,1,30
    grid_one_column_width 1003,2,200
    grid_one_column_width 1003,3,200
    grid_one_column_width 1003,4,100
    grid_one_column_width 1003,5,1
    grid_one_column_width 1003,6,300
    for i%=1 to MaxEnseignants%
      grid_write 1003,i%+1,1,str$(i%)
    next i%
    grid_write 1003,1,1,"#"
    grid_write 1003,1,2,"Nom"
    grid_write 1003,1,3,"Prénom"
    grid_write 1003,1,4,"ID"
    grid_write 1003,1,5,"Boite mail"
    grid_write 1003,1,6,"Pwd"
end_sub

sub GUI_Enseignants()
  grid 2001 : parent 2001,2000
    on_click 2001,SelectEnseignant
    width 2001,856 : height 2001,height_client(0)-60
    grid_column_fixed 2001,1                                     
    grid_row_fixed 2001,1
    grid_row 2001,MaxEnseignants% + 1
    grid_column 2001,6
    grid_one_column_width 2001,1,30
    grid_one_column_width 2001,2,200
    grid_one_column_width 2001,3,200
    grid_one_column_width 2001,4,100
    grid_one_column_width 2001,5,1
    grid_one_column_width 2001,6,300
    for i%=1 to MaxEnseignants%
      grid_write 2001,i%+1,1,str$(i%)
    next i%
    grid_write 2001,1,1,"#"
    grid_write 2001,1,2,"Nom"
    grid_write 2001,1,3,"Prénom"
    grid_write 2001,1,4,"ID"
    grid_write 2001,1,5,"Boite mail"
    grid_write 2001,1,6,"Pwd"
  button 2010 : parent 2010,2000 : top 2010,10 : left 2010,width(2001)+20 : width 2010,100
    caption 2010,"Nouveau" : on_click 2010,NouvelEnseignant
  button 2011 : parent 2011,2000 : top 2011,top(2010)+height(2010) : left 2011,width(2001)+20 : width 2011,100
    caption 2011,"Supprimer" : on_click 2011,SupprimerEnseignant
  button 2012 : parent 2012,2000 : top 2012,top(2011)+height(2011) : left 2012,width(2001)+20 : width 2012,100
    caption 2012,"Modifier" : on_click 2012,ModifierEnseignant
       
  form 2100 : hide 2100 : : on_close 2100,close2100 : caption 2100,"Création d'un nouvel enseignant"
    width 2100,800 : height 2100,500
    top 2100,(height_client(0)-500)/2 : left 2100,(width_client(0)-800)/2
    alpha 2101 : parent 2101,2100 : top 2101,20 : left 2101,20 : caption 2101,"Nom:"
    alpha 2102 : parent 2102,2100 : top 2102,50 : left 2102,20 : caption 2102,"Prénom:"
    alpha 2103 : parent 2103,2100 : top 2103,80 : left 2103,20 : caption 2103,"ID:"
    alpha 2104 : parent 2104,2100 : top 2104,110 : left 2104,20 : caption 2104,"Mot de passe:"
    edit 2111 : parent 2111,2100 : top 2111,20 : left 2111,120 : width 2111,600
    edit 2112 : parent 2112,2100 : top 2112,50 : left 2112,120 : width 2112,600
    edit 2113 : parent 2113,2100 : top 2113,80 : left 2113,120 : width 2113,200
    edit 2114 : parent 2114,2100 : top 2114,110 : left 2114,120 : width 2114,200
      secret_on 2114
    button 2120 : parent 2120,2100 : top 2120,top(2114) : left 2120,left(2114)+width(2114)
      caption 2120,"Voir" : on_click 2120,pwdsecret
    button 2028 : parent 2028,2100  : top 2028,380 : left 2028,20 : width 2028,300
      caption 2028,"Valider" : font_bold 2028 : on_click 2028,ValiderEnseignant
    button 2029 : parent 2029,2100  : top 2029,380 : left 2029,left(2028)+width(2028)+30 : width 2029,300
      caption 2029,"Annuler" : on_click 2029,Close2100     
end_sub

sub GUI_Statistiques()
  alpha 3001 : parent 3001,3000 : top 3001,100 : left 3001,100 : font_bold 3001
    font_size 3001,24 : caption 3001,"Cette partie reste à implémenter !"
end_sub

sub verification()
  res% = DLL_call1("CreateMailbox",adr(mailbox_serveur$))
  if res%<0
    message "Le serveur est déjà lancé !"+chr$(13)+chr$(10)+"Impossible de le lancer une seconde fois !"
    terminate
  else
    mbx_serveur% = res%
    message "Le serveur a été lancé."
  end_if
end_sub

sub fichiers()
  if file_exists(FichierEnseignants$)=0
    file_open_write 1,FichierEnseignants$
    file_writeln 1,EnteteEnseignants$
    file_close 1
  end_if
  file_open_read 1,FichierEnseignants$
  file_readln 1,s$
  if s$<>EnteteEnseignants$
    message "LE fichier des enseignants esr invalide :"+chr$(13)+chr$(10)+"Veuillez appeler l'assistance !"
    terminate
  end_if
  grid_clear 2001,MaxEnseignants%+1,6
    for i%=1 to MaxEnseignants%
      grid_write 2001,i%+1,1,str$(i%)
    next i%
    grid_write 2001,1,1,"#"
    grid_write 2001,1,2,"Nom"
    grid_write 2001,1,3,"Prénom"
    grid_write 2001,1,4,"ID"
    grid_write 2001,1,5,"Boite mail"
    grid_write 2001,1,6,"Pwd"
  for i%=1 to MaxEnseignants%
    if file_eof(1)=1 then exit_for
    file_readln 1,s$
    p% = instr(s$,",")
    nom$ = left$(s$,p%-1)
    s$ = mid$(s$,p%+1,len(s$))
    p% = instr(s$,",")
    prenom$ = left$(s$,p%-1)
    s$ = mid$(s$,p%+1,len(s$))
    p% = instr(s$,",")
    id$ = left$(s$,p%-1)
    s$ = mid$(s$,p%+1,len(s$))
    pwd$ = s$
    grid_write 2001,i%+1,2,nom$
    grid_write 2001,i%+1,3,prenom$
    grid_write 2001,i%+1,4,id$
    grid_write 2001,i%+1,5,""                    : ' pas de boite à lettres à ce moment !
    grid_write 2001,i%+1,6,pwd$
  next i%
  file_close 1
  NombreRequetesAcceptees% = 0
  NombreRequetesRejetees% = 0
  nActifs% = 0
  ActiverServer(1)
end_sub

sub MajEnseignants()
  file_open_write 1,FichierEnseignants$
  file_writeln 1,EnteteEnseignants$
  for i%=1 to MaxEnseignants%
    nom$ = grid_read$(2001,i%+1,2)
    prenom$ = grid_read$(2001,i%+1,3)
    id$ = grid_read$(2001,i%+1,4)
    pwd$ = grid_read$(2001,i%+1,6)
    if id$="" then exit_for
    s$ = nom$+","+prenom$+","+id$+","+pwd$
    file_writeln 1,s$
  next i%
  file_close 1
end_sub

sub ActiverServer(act%)
 if act%=1
  serveurActif% = 1
  caption 0,titre$+"  (Actif)"
  caption 1001,"Le serveur est à l'écoute..."
  timer_on 90
 else
  timer_off 90
  serveurActif% = 0
  caption 0,titre$+"  (Inactif)"
  caption 1001,"Le serveur est suspendu..."
 end_if
end_sub




fnc Crypter$(x$)
  dim_local s2$
  s2$ = string$(50," ")
  res% = dll_call2("Crypt64",adr(x$),adr(s2$))
  s2$ = trim$(s2$)
  result s2$
end_fnc

fnc Decrypter$(x$)
  dim_local s2$
  s2$ = string$(50," ")
  res% = dll_call2("Uncrypt64",adr(x$),adr(s2$))
  s2$ = trim$(s2$)
  result s2$
end_fnc



close0:
  res% = DLL_call1("CloseMailbox",mbx_serveur%)
  return
 
close2100:
  active 0
  to_foreground 0
  return
 
NouvelEnseignant:
  ModeOperation% = 1
  inactive 0
  secret_on 2114
  pwdSecret% = 1
  text 2111,""
  text 2112,""
  text 2113,""
  text 2114,""
  show 2100
  to_foreground 2100
  return
 
pwdsecret:
  if pwdSecret%=1
    secret_off 2114
  else
    secret_on 2114
  end_if
  pwdSecret% = 1 - pwdSecret%
  return
 
ValiderEnseignant:
  select ModeOperation%
    case 1: gosub CreerEnseignant
    case 2: gosub RemplacerEnseignant
  end_select
  return
 
CreerEnseignant:
  nom$ = trim$(text$(2111))
  prenom$ = trim$(text$(2112))
  id$ = trim$(text$(2113))
  pwd$ = trim$(text$(2114))
  if nom$=""
    message "Le nom de l'enseignant n'est pas renseigné !"
    return
  end_if
  if prenom$=""
    message "Le prénom de l'enseignant n'est pas renseigné !"
    return
  end_if
  if id$=""
    message "L'identifiant de l'enseignant n'est pas renseigné !"
    return
  end_if
  if pwd$=""
    message "Le mot de passe de l'enseignant n'est pas renseigné !"
    return
  end_if
 
  ' tester l'existence de l'identifiant dans la liste
  for i%=1 to MaxEnseignants%
    if grid_read$(2001,i%+1,4)="" then exit_for
    if grid_read$(2001,i%+1,4)=id$
      message "Un enseignant avec l'identifiant "+id$+" existe déjà !"
      return
    end_if
  next i%
 
  ' chercher la première ligne libre
  for i%=1 to MaxEnseignants%
    if grid_read$(2001,i%+1,4)=""
      pwd$ = Crypter$(pwd$)            : ' ici, le mot de passe est crypté !
      grid_write 2001,i%+1,2,nom$
      grid_write 2001,i%+1,3,prenom$
      grid_write 2001,i%+1,4,id$
      grid_write 2001,i%+1,5,""        : ' pas de boite mail pour le moment !
      grid_write 2001,i%+1,6,pwd$      : ' ne sera pas visible dans la grille !
      MajEnseignants()
      hide 2100
      gosub Close2100
      return
    end_if
  next i%
  message "La liste des enseignants est plaine !"+chr$(13)+chr$(10)+"Veuillez contacter l'assistance !" 
  return

SupprimerEnseignant:
  if GridSelected%=0
    message "Il faut sélectionner un enseignant !"
    return
  end_if
  i% = GridSelected%
  nom$ = grid_read$(2001,i%,2)
  prenom$ = grid_read$(2001,i%,3)
  s$ = "Voulez-vous vraiment supprimer l'enseignant:" + chr$(13)+chr$(10)
  s$ = s$ + nom$ + ", "+prenom$ + " ?"
  if message_confirmation_yes_no(s$)<>1 then return
  if i%<>MaxEnseignants%
    while grid_read$(2001,i%+1,4)<>""
      for j%=2 to 6
        s$ = grid_read$(2001,i%+1,j%)
        grid_write 2001,i%,j%,s$
      next j%
      i% = i% + 1
    end_while
  end_if
  for j%=2 to 6
    grid_write 2001,i%,j%,""
  next j%
  MajEnseignants()
  hide 2100
  gosub Close2100
  return
  return
 
SelectEnseignant:
  GridSelected% = grid_y_to_row(2001,mouse_y_left_down(2001))
  return
 
ClickTab:
  select number_show
    case 1000: ActiverServer(1)
    case 2000: ActiverServer(0)
    case 3000: ActiverServer(0)
  end_select
  return
 
ModifierEnseignant:
  if GridSelected%=0
    message "Il faut sélectionner un enseignant !"
    return
  end_if
  ModeOperation% = 2
  inactive 0
  secret_on 2114
  pwdSecret% = 1
  text 2111,grid_read$(2001,GridSelected%,2)
  text 2112,grid_read$(2001,GridSelected%,3)
  text 2113,grid_read$(2001,GridSelected%,4)
  s$ = grid_read$(2001,GridSelected%,6)
  s$ = Decrypter$(s$)
  text 2114,s$
  show 2100
  to_foreground 2100
  return
 
RemplacerEnseignant:
  nom$ = trim$(text$(2111))
  prenom$ = trim$(text$(2112))
  id$ = trim$(text$(2113))
  pwd$ = trim$(text$(2114))
  pwd$ = Crypter$(pwd$)

  if nom$=""
    message "Le nom de l'enseignant n'est pas renseigné !"
    return
  end_if
  if prenom$=""
    message "Le prénom de l'enseignant n'est pas renseigné !"
    return
  end_if
  if id$=""
    message "L'identifiant de l'enseignant n'est pas renseigné !"
    return
  end_if
  if pwd$=""
    message "Le mot de passe de l'enseignant n'est pas renseigné !"
    return
  end_if
 
  ' tester lla cohérence de l'identification de l'enseignant
  if id$<>grid_read$(2001,GridSelected%,4)
    s$ = "Voulez-vous vraiment changer l'ID de l'enseignant: "+chr$(13)+chr$(10)
    s$ = "    "+grid_read$(2001,GridSelected%,4)+" --> "+id$+"  ?"
    if message_conformation_yes_no(s$)<>1 then id$ = grid_read$(2001,GridSelected%,4)
  end_if
  pwd$ = Crypter$(pwd$)            : ' ici, le mot de passe est crypté !
  grid_write 2001,GridSelected%,2,nom$
  grid_write 2001,GridSelected%,3,prenom$
  grid_write 2001,GridSelected%,4,id$
  grid_write 2001,GridSelected%,5,""        : ' pas de boite mail pour le moment !
  grid_write 2001,GridSelected%,6,pwd$      : ' ne sera pas visible dans la grille !
  MajEnseignants()
  hide 2100
  gosub Close2100
  return
 


' c'est ici qu'on va périodiquement tester si une requête est disponible
TimerEvent:
  if serveurActif%=0 then return              : ' ne rien faire si le serveur doit être inactif !
  timer_off 90
  TimerEventProcedure() 
  timer_on 90
  return
 
sub TimerEventProcedure()
  ' variables uniquement pour TimerEvent:
  dim_local Ts$, Ts1$, Tp%, Ti%, Tj%, Tres%, Treq$, Tnom$, Tprenom$, Tid$, Tpwd$, Tmbx_Client$, Tok%
  Ts$ = str$(NombreRequetesAcceptees%)+" requêtes acceptées    "+str$(NombreRequetesRejetees%)+" requêtes rejetées"
  caption 1002,Ts$
  Tres% = DLL_call5("GetMailboxInfo",mbx_serveur%,adr(maxsiz%),adr(nxtsiz%),adr(cnt%),adr(tmo%))
  if cnt%>0                                    : ' est-ce qu'il y a des requêtes en attente ?
    Tres% = DLL_call2("ReceiveMailboxMessage",mbx_serveur%,handle(99))    : ' prendre la quête la plus ancienne
   
    ' identifier la requête reçue
    Tmbx_Client$ = ""                          : ' par précaution...
    Ts$ = item_read$(99,1) + ","              : ' prendre la première ligne de la requête
    Tp% = instr(Ts$,",")                      : ' chercher la première virgule
    Treq$ = Left$(Ts$,Tp%-1)                  : ' prendre le code de la requête
    Ts$ = Mid$(Ts$,Tp%+1,len(Ts$))            : ' éliminer le code de la requête
    Tp% = instr(Ts$,",")
    Tid$ = Left$(Ts$,Tp%-1)                    : ' récupérer l'ID de l'enseignant
    Ts$ = Mid$(Ts$,Tp%+1,len(Ts$))            : ' éliminer l'ID
    for Ti%=2 to MaxEnseignants%+1
      Ts1$ = grid_read$(2001,Ti%,4)            : ' lire le ID d'un enseignant dans la table
      if Ts1$="" then exit_for                : ' fin de la liste ?
      if Tid$=Ts1$                            : ' on a trouvé l'ID ?
        ' traiter le login ici
        if Treq$="LOGIN"
          Tok% = 1                                : ' par défaut: ok
          Tp% = instr(Ts$,",")
          Tpwd$ = Left$(Ts$,Tp%-1)                : ' récupérer le mot de passe de l'enseignant
          Ts$ = Mid$(Ts$,Tp%+1,len(Ts$))          : ' éliminer l'ID
          Tp% = instr(Ts$,",")
          Tmbx_Client$ = Left$(Ts$,Tp%-1)          : ' récupérer la boite mail de l'enseignant
     
          if Grid_read$(2001,Ti%,6)<>Tpwd$ then Tok% = 0  : ' mot de passe erronné !
          if grid_read$(2001,Ti%,5)<>"" then Tok% = 0      : ' boite à lettres déjà connectée ?
          grid_write 2001,Ti%,5,Tmbx_Client$    : ' mémoriser ma boite à lettre de l'enseignant
          if Tok%=0
            Ts$ = "FAILED"
            if Tmbx_Client$<>"" then Tres% = DLL_call2("SendMailboxMessage",adr(Tmbx_Client$),adr(Ts$))
            exit_sub
          end_if
          Ts$ = "OK"
          if Tmbx_Client$<>"" then Tres% = DLL_call2("SendMailboxMessage",adr(Tmbx_Client$),adr(Ts$))
          NombreRequetesAcceptees%  = NombreRequetesAcceptees% + 1
          ' ajouter l'enseignant à la liste des enseignants actifs (grid 1003)
          nActifs% = nActifs% + 1
          Tnom$ = grid_read$(2001,Ti%,2)
          Tprenom$ = grid_read$(2001,Ti%,3)
          grid_write 1003,nActifs%+1,2,Tnom$
          grid_write 1003,nActifs%+1,3,Tprenom$
          grid_write 1003,nActifs%+1,4,Tid$
          grid_write 1003,nActifs%+1,5,Tpwd$
          grid_write 1003,nActifs%+1,6,Tmbx_Client$
          exit_sub 
        end_if    : ' fin LOGIN
   
        ' traiter le LOGOUT ici
        if Treq$="LOGOUT"
          Tmbx_Client$ = grid_read$(2001,Ti%,6)        : ' mémoriser la mailbox du client
          Ts$ = "OK"
          if Tmbx_Client$<>"" then Tres% = DLL_call2("SendMailboxMessage",adr(Tmbx_Client$),adr(Ts$))
          NombreRequetesAcceptees%  = NombreRequetesAcceptees% + 1
          ' chercher l'ID dans la liste des enseignants actifs (grid 1003)
          for Tj%=2 to MaxEnseignants%+1
            if Tid$=grid_read$(1003,Tj%,4)              : ' trouvé dans la liste des actifs
              ' alors supprimer de cette liste
              repeat                                    : ' effacter l'enseignant déconnecté
                grid_write 1003,Tj%,2,grid_read$(1003,Tj%+1,2)
                grid_write 1003,Tj%,3,grid_read$(1003,Tj%+1,3)
                grid_write 1003,Tj%,4,grid_read$(1003,Tj%+1,4)
                grid_write 1003,Tj%,5,grid_read$(1003,Tj%+1,5)
                grid_write 1003,Tj%,6,grid_read$(1003,Tj%+1,6)
              until grid_read$(1003,Tj%+1,4)=""       
              grid_write 2001,Ti%,6,""                  : ' effacer la mailbox dans la liste des enseignants grid 2001
              nActifs% = nActifs% - 1
              exit_sub
            end_if
          next Tj%
        end_if    : ' fin LOGOUT
     

        ' traiter toutes les aures requêtes ici...
   
   
      end_if                    : ' fin traitement ID trouvé dans le grid 2001

      ' ici, sortie pour requête non reconnué ou en erreur
      NombreRequetesRejetees% = NombreRequetesRejetees% + 1
      Ts$ = "FAILED"
      if Tmbx_Client$<>"" then Tres% = DLL_call2("SendMailboxMessage",adr(Tmbx_Client$),adr(Ts$))
      exit_sub
     
    next Ti%                    : ' fin des recherches de l'identifiant dans la liste des enseignants 
    Ts$ = "FAILED"
    if Tmbx_Client$<>"" then Tres% = DLL_call2("SendMailboxMessage",adr(Tmbx_Client$),adr(Ts$))
  end_if
end_sub
 

Cependant, pour sélectionner un enseignant à modifier ou à supprimer, ut peux cliquer sur n'importe quel champ de l'enseignant. Je n'utilise pas la position horizontale pour l'identifier - uniquement la position verticale du cluc dans le grid.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
 
Gestion d'un système client-serveur.
Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2
 Sujets similaires
-
» Serveur RPC pas disponible
» Problème d'accès à mon serveur FTP habituel.
» 2.35 du 21 mai 2013: gestion d'un serveur FTP
» Système de gestion de convecteurs électriques (carte Arduino
» Serveur FTP gratuit.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: