Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1350 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4
Auteur Sujet :

Petit programme pour faire ses comptes ; C'est quoi ce gros bug

n°1495842
Profil sup​primé
Posté le 24-12-2006 à 17:54:49  answer
 

Reprise du message précédent :
Pour poursuivre !
 
Avant de faire ma sauce concernant le tranfert de fichiers, je voudrait construire une base de données concernant la consomationdes menages, faire des statistique et communiquer ces derniere au ménage en question.
Pour ce faire, je doit etoffer la base de mon programme Fmi en declarant un type enuméré T_Rubrique.
 
La nature de T_rubrique doit etre représentative de la nature des produits consomés IRL.
 
je suis donc la pour vous demander, afin d'etablire une liste exaustive des produit que vous consomé, de bien vouloir m'aider. Etablir une classe n'est pas chose aisé .... le debat est possible ici.
 
Voila comment je perçoit le type T_Rubrique ::=
 
type T_rubique is (Transport, vacance, nourriture, logement, energie, divertissement, hygienne, accident, ... recherche, habillement, ameublement, frais_banquaire, procés_verbaux, impots, perte, santé ); oui dans la consomation des menage il y a aussi 'recherche'  :heink:  
 
je maintiendrai le type T_Rubrique à jour dans ce message.
 
Merci de votre participation.

Message cité 1 fois
Message édité par Profil supprimé le 27-12-2006 à 11:20:22
mood
Publicité
Posté le 24-12-2006 à 17:54:49  profilanswer
 

n°1495851
Profil sup​primé
Posté le 24-12-2006 à 19:16:30  answer
 

..... En fait, j'ai besoin de deux types de rubrique, une rubrique debitrisse, et un rubrique creditrisse.
 
J'appellerai donc la rubrique creditrisse T_Rubrique_Credit et T_Rubrique_Debit la rubrique debitrisse.
 
je garde le message ci dessu pour mettre à jour la rubrique T_Rubrique_Debit et ce message pour la rubrque T_rubrique_Debit.
 
type T_Rubrique_Credit is (Salaire, Prime_Salaire, entree_exceptionnelle);  
 
Ceci dit, je ne ferai aucune statistique sur les revenu des ménages .... ça n'a pas beaucoup d'intéret à priori.
 
Merci  :jap:
 
(fatche, ça complique conciderablement le problème  :heink: )

Message cité 1 fois
Message édité par Profil supprimé le 24-12-2006 à 19:19:29
n°1495883
Profil sup​primé
Posté le 25-12-2006 à 10:04:33  answer
 


Quoi que ....... nous travaillons tous dans un secteur correspondant à nos besoin .... donc ..... le type T_Rubrique devrait enumérer "les secteurs d'activités".

n°1495908
Profil sup​primé
Posté le 25-12-2006 à 15:46:05  answer
 

:hello:  
 
Je poursuis ...
 
j'ai un 'compteur' d'adition que j'incrémente à chaque fois que j'aditionne un 'montant' à une une variable 'somme', je divise cette somme par le compteur et j'obtien la 'moyenne' ;Si je veux servir plusieurs clients "en même temps", je doit incrementer le 'compteur', aditionner le 'montant' à la 'somme' et faire la 'moyenne' "en acces exclusif".
 
Alors voila ... comment faire ... le mieu, pour l'excusivité ?
 
C'est que c'est loin tout ça  [:dawa_neowen]
 
edit :: je ne suis pas sur d'avoir exprimé correctement mon problème, ni même que ce soit un problème  :??:


Message édité par Profil supprimé le 25-12-2006 à 16:04:55
n°1495920
Profil sup​primé
Posté le 25-12-2006 à 18:17:52  answer
 

Voila, c'est fait enfin presque ... les premiere version mono client en tout cas, => calcule la moyenne par rubrique, mais je n'ai pas encore créé le fichier de données coté serveur.
 
les sources tgz ::= Fmi-client-0.0.2-alpha.tgz et Fmi-server-0.0.2-beta.tgz  
les sources zip ::= Fmi-client-0.0.2-alpha.zip et Fmi-server-0.0.2-beta.zip  
 
README inside  :jap:
 
mon serveur est en marche sur "denimes.net" si vous voulez vous amuser un peu  :love:


Message édité par Profil supprimé le 25-12-2006 à 18:20:51
n°1496205
Profil sup​primé
Posté le 27-12-2006 à 09:48:41  answer
 

Bonjour,
 
Pas de modification majeur, un simple ajout du compteur de client à destination du client, et une procedure vider(banque : t_banque) pour l'initialisation de la banque. J'ai aussi corrigé la tache p_control_data.
 
Ce message aussi pour les testeurs eventuels, ... ne pas oublier de selectionner un numero de compte avant d'entrer les données en mode previsionnel et reel.
 
les source 0.0.3-alpha du matin  
les sources tgz ::= Fmi-client-0.0.3-alpha.tgz et Fmi-server-0.0.3-alpha.tgz  
 
Merci à tous  ;)

n°1496271
Profil sup​primé
Posté le 27-12-2006 à 12:18:10  answer
 


 
 
 
 
up  :sweat:

Message cité 1 fois
Message édité par Profil supprimé le 27-12-2006 à 12:21:28
n°1496404
Profil sup​primé
Posté le 27-12-2006 à 18:09:24  answer
 


 
Ceci dit ... 1687 div 85 = 19 .. lecteurs ... c'est pas bezef tout de même pour un si beau langage que l'Ada
 
les sources tgz (pas encore dispo, mais ça vien  :whistle: ) ::= Fmi-client-0.0.3-beta.tgz  
 
j'ai fait quelques corrections, le serveur est inchangé.
 
Si non, vous trouvez pas domage qu'il faille envoyer ses comptes pour avoir les moyennes ... fatche, c'est pas simple  :pt1cable:

n°1496416
Profil sup​primé
Posté le 27-12-2006 à 18:49:32  answer
 

Zute, j'ai fait des corrections mais j'ai fait n'importe quoi avec la suppression des echeances  :pfff:  
 
je met à jour, je garde la même version dont le lien est ci-dessu
 
Désolé pour le up  :pfff:
 
edit : voila c'est corrigé  [:dawa_neowen]


Message édité par Profil supprimé le 27-12-2006 à 19:03:32
n°1496527
Profil sup​primé
Posté le 28-12-2006 à 10:52:45  answer
 

Bonjour,
Fmi client et server 0.0.4-alpha, permettant de recevoir les données du serveur sans pour autant en evoyer, mais ça marche pas ... des valeurs incorrectes à l'affichage dans le mode Connection_Reseau, je ne trouve pas l'erreur.


Message édité par Profil supprimé le 28-12-2006 à 10:53:27
mood
Publicité
Posté le 28-12-2006 à 10:52:45  profilanswer
 

n°1496558
Profil sup​primé
Posté le 28-12-2006 à 12:43:41  answer
 

Voila, c'est corrigé, ... je ne traite toujours pas les cas particuliers, une mauvaise utilsation du programme entrainera dans la plupart des cas une erreur fatale. Les commandes "get_prev 'domain'" et "get_real 'domain'" du mode connection_reseau permettent après au moins un enregistrement de recevoir les données du seveurs. Des commandes "help" et "usage" sont disponibles sur le client. Un fichier README et disponible dans l'archive du client. Vous pouvez utiliser 'main --help' sur le client. Aucun argument en ligne de dommande n'est attendu sur le serveur sauf pour le stoper, via une variable Shared_Passives dont le fichier associé est nommé demon.strat_stop et devant se trouver dans le repertoir du binaire, si il est en tache de fond, dans quel cas vous pouvez appeler "main stop" qui avortera la tache Pong et entrainera la terminaison du programme.
 
 :heink:  Je suis toujours à la recherche d'un methode permetant de servir plusieurs clients simultanément ??

n°1496722
Profil sup​primé
Posté le 28-12-2006 à 17:07:54  answer
 


 
 
En utilisant les selectors par exemple  :jap:

n°1497157
Profil sup​primé
Posté le 29-12-2006 à 16:33:33  answer
 


 
 
 
Finalement c'est pas la peine ... excusez-moi, je suis un peu limité de l'esprit parfois  :pfff:

Message cité 1 fois
Message édité par Profil supprimé le 29-12-2006 à 16:55:31
n°1497622
Profil sup​primé
Posté le 01-01-2007 à 00:30:13  answer
 


Fmi version 0.0.4-beta, Copyright (C) 2007 Manuel De Girardi.
 
Fmi is ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions;
 
Fmi est fourni sans AUCUNE GARANTIE.
Ce programme est libre et vous êtes encouragé à le redistribuer  
sous certaines conditions ;


Sources Fmi-client-0.0.4-beta.tgz pour Gnu/Linux et binaire fmi-client pour Windows.
 
Bonne année  :pfff:  

n°1498344
Profil sup​primé
Posté le 03-01-2007 à 16:52:57  answer
 

Bonjour,
 
J'ai ecrit un nouvelle tache T_T_Ia qui est en fait un type, mais peu importe, sensé etre un client serveur en IA mais le coté IA reste de côté pour l'instant. J'ai simplement ecrit un model qui envoi et réceptionne un type 'string' en local.
Le client et le serveur utilise donc "localhost". Conceptuellement parlant, même si ça doit passer le code n'est pas terrible ... c'est un test/exercice sur l'utilisation des Gnat.Selectors.
 
Le programme plante apres le premier envoi du client au serveur.
 
le client est une simple initialisation de socket avec demande de connection suivant de l'envoi de la "line"
le serveur est une tache "server"
 
je fournis le code, si vous avez le courage de jeter un oueil.
le code complet est disponible ici ::= real_ia pour Gnu/Linux, et utilisant Gnat, Gnat.Sockets.

Code :
  1. task Ecran is
  2.            entry First_Line(Message : String);
  3.            entry Ajouter_output(Message : String);
  4.            entry Ajouter_Input(Message : String);
  5.            entry Clear_input;
  6.            entry Clear_Output;
  7.         end Ecran;
  8.  
  9.  
  10.         task body Ecran is
  11.            First : String(1..80) := (others => Ascii.Nul);
  12.            Page_Input : String(1..920) := (others =>  ' ');
  13.            Last_Input : positive := 1;
  14.            Page_Output : String(1..920) := (others =>  ' ');
  15.            Last_Output : Positive := 1;
  16.  
  17.         begin
  18.            while not End_Of_Program.End_Of_Program loop
  19.               select
  20.                  accept First_Line(Message : String) do
  21.                     First := Message(1..80);
  22.                  end First_Line;
  23.               or
  24.                  accept Ajouter_output(Message : String) do
  25.                     if Message'Length /= 0 then
  26.                        Page_Output(Last_Output+2..Last_Output+2+Message'Length-1) := Message;
  27.                        Last_Output := Last_Output+ Message'Length+1;
  28.                     end if;
  29.  
  30.                  end Ajouter_Output;
  31.               or
  32.                  accept Ajouter_input(Message : String) do
  33.                     Page_input(1..Message'Length) := Message;
  34.                  end Ajouter_Input;
  35.               or
  36.                  accept Clear_input do
  37.                     First := (others => Ascii.nul);
  38.                     Page_Input := (others =>  ' ');
  39.                  end Clear_input;
  40.               or
  41.                  accept Clear_Output do
  42.                     Page_Output := (others =>  ' ');
  43.                     Last_Output := 1;
  44.                  end Clear_output;
  45.  
  46.               or
  47.                  delay 0.0;
  48.                  if Current_Mode = Mode_Ia then
  49.                     Res := System("clear" & Ascii.Nul);
  50.                     Put(First);
  51.                     Put(Page_Output);
  52.                     Put("--------------------------------------------------------------------------------" );
  53.                     Put(Page_input);
  54.                     delay 0.075;
  55.                  else
  56.                     delay 0.5;
  57.                  end if;
  58.               end select;
  59.            end loop;
  60.            Put_Line("exit ecran ..." );
  61.         end Ecran;
  62.  
  63.  
  64.         task type T_T_Ia(Id : T_Ia_Id) is
  65.            entry Recevoir(Char : Character);
  66.            entry recevoir(Msg : String);
  67.         end T_T_Ia;
  68.  
  69.         task body T_T_Ia is
  70.  
  71.  
  72.            task Server is
  73.               entry Srv_Recevoir(Message : in string);
  74.            end Server;
  75.  
  76.            task body Server is
  77.               type Socket_Access is access Socket_Type;
  78.  
  79.               task type T_T_Pong(Socket : Socket_access) is
  80.                  entry Get_Id(Id : out Task_Id);
  81.               end T_T_Pong;
  82.  
  83.               task body T_T_Pong is
  84.                  Channel  : Stream_Access;
  85.               begin
  86.                  accept Get_Id(Id : out Task_Id) do
  87.                     Id := Current_Task;
  88.                  end Get_Id;
  89.                  Channel := Stream (Socket.all);
  90.                  Srv_Recevoir(String'Input(Channel));
  91.                  Ecran.Ajouter_Output("exit pong" );
  92.               end T_T_Pong;
  93.  
  94.               type Pong_Task(Socket : Socket_access) is
  95.                  record
  96.                     Id : Task_Id := Null_Task_id;
  97.                     Pong : T_T_Pong(Socket);
  98.                  end record;
  99.               type Pong_Access is access Pong_task;
  100.  
  101.               type T_Bliste is array(1..10) of Boolean;
  102.  
  103.  
  104.  
  105.  
  106.               Serv_Socket,Client_socket : Socket_Type;
  107.               Serv_Addr,Client_addr : Sock_Addr_type;
  108.               Message : String_access;
  109.               Liste : array(1..10) of Socket_access;
  110.               Pong_Liste : array(1..10) of Pong_access;
  111.               Bliste : T_Bliste;
  112.               Reads,Write : Socket_Set_Type;
  113.               Selector : Selector_Type;
  114.               Status : Selector_Status;
  115.               Ptr : Integer := 0;
  116.               Channel_Client : Stream_Access;
  117.  
  118.  
  119.               function Chercher return Natural is
  120.               begin
  121.                  for I in 1..10 loop
  122.                     if bliste(I) and then
  123.                       Pong_liste(I) /= null and then
  124.                       Is_Terminated(Pong_liste(I).Id) then
  125.                        Pong_liste(I) := null;
  126.                        Pong_Liste(I).Id := Null_Task_Id;
  127.                        return I;
  128.                     else
  129.                        return I;
  130.                     end if;
  131.                  end loop;
  132.                  return 0;
  133.               end Chercher;
  134.  
  135.  
  136.            begin
  137.               Serv_Addr.Addr := Addresses(Get_Host_By_Name("localhost" ));
  138.               Serv_Addr.Port := 5876+Port_Type(Id);
  139.               Create_Socket(Serv_socket);
  140.               Bind_socket(Serv_Socket,Serv_addr);
  141.               Listen_socket(Serv_Socket);
  142.               Create_Selector(Selector);
  143.               Set(Write,Serv_Socket);
  144.               for I in 1..Liste'length loop
  145.                  liste(I) := new Socket_Type;
  146.               end loop;
  147.               Bliste := (others => False);
  148.               loop
  149.                  Empty(Reads);
  150.                  Set(Reads,Serv_Socket);
  151.                  for I in 1..10 loop
  152.                     if Bliste(I) then
  153.                        Set(Reads,Liste(I).all);
  154.                     end if;
  155.                  end loop;
  156.                  select
  157.                     accept Srv_Recevoir(Message : String) do
  158.                        Ecran.Ajouter_Output("Tita" );
  159.                        Recevoir(Message);
  160.                        Ecran.Ajouter_Output("Totu" );
  161.                     end Srv_Recevoir;
  162.                  or
  163.                     delay(0.0);
  164.                     Ecran.Ajouter_Output("TATA" );
  165.                     Check_Selector(Selector,Reads,Write,Status);
  166.                     Ecran.Ajouter_Output("TOTA" );
  167.                     case Status is
  168.                        when Completed =>
  169.                           if Is_Set(Reads,Serv_Socket) then
  170.                              Ptr := Chercher;
  171.                              -------------
  172.                              --   DEBUG --
  173.                              Ecran.Ajouter_Output("A" );
  174.                              Accept_Socket(Serv_Socket,Liste(Ptr).all,Serv_Addr);
  175.                              Bliste(Ptr) := True;
  176.  
  177.                           else
  178.                              for I in 1..Bliste'length loop
  179.                                 if Bliste(I) then
  180.                                    if Is_Set(Reads,Liste(i).all) then
  181.                                       Ecran.Ajouter_Output("serveur 1." & Integer'Image(I));
  182.                                       Pong_Liste(i) := new Pong_task(Liste(i));
  183.                                       Ecran.Ajouter_Output("serveur 2." & Integer'Image(I));
  184.                                       Pong_Liste(i).Pong.Get_Id(Pong_Liste(i).Id);
  185.                                       Ecran.Ajouter_Output("serveur 3." & Integer'Image(I));
  186.                                       Bliste(I) := False;
  187.                                       Ecran.Ajouter_Output("B" );
  188.                                    end if;
  189.                                 end if;
  190.                              end loop;
  191.                           end if;
  192.                        when Expired =>
  193.                           null;
  194.  
  195.                        when Aborted =>
  196.                           null;
  197.  
  198.                     end case;
  199.                  end select;
  200.               end loop;
  201.            end Server;
  202.  
  203.            First_Line : String(1..80) := (others => Ascii.Nul);
  204.            Line : String(1..880);
  205.            Last : Natural := 0;
  206.  
  207.            type T_Cmd is (Null_Item, Help, Quit,Ia,Clear);
  208.  
  209.            function Value(Command : String) return T_Cmd is
  210.               First_Space : positive := 1;
  211.            begin
  212.               while Command(First_Space) /= ' ' and then
  213.                 First_space < Command'Length loop
  214.                  First_Space := First_Space + 1;
  215.               end loop;
  216.               return T_Cmd'Value(Command(Index_Non_Blank(Command)..First_Space));
  217.            exception
  218.               when others =>
  219.                  return Null_Item;
  220.            end Value;
  221.  
  222.            Command : T_Cmd;
  223.  
  224.            Client_socket : Socket_Type;
  225.            Client_addr : Sock_Addr_type;
  226.            Channel_Client : Stream_Access;
  227.         begin
  228.            Create_Socket(Client_Socket);
  229. --            Set_Socket_Option
  230. --              (Client_Socket,
  231. --               Socket_Level,
  232. --               (Reuse_Address, ));
  233.            Client_Addr.Port := 5876+Port_Type(Id);
  234.            while not End_Of_Program.End_Of_Program loop
  235.               select
  236.                  when Current_Mode = Mode_ia and then
  237.                    Current_Ia_Id = 0 =>
  238.  
  239.                     accept Recevoir(Char : Character) do
  240.                        case Char is
  241.                           when Character'Val(10) =>
  242.                              if Last /= 0 then
  243.                                 Command := Value(Line(1..Last));
  244.                                 case Command is
  245.                                    when Null_Item =>
  246.                                       begin
  247.                                          Ecran.Ajouter_Output("C" );
  248.                                          Client_Addr.Addr := Addresses(Get_Host_By_Name("localhost" ));
  249.                                          Ecran.Ajouter_Output("C.1" );
  250.  
  251.                                          Connect_Socket(Client_Socket, Client_Addr);
  252.                                          Ecran.Ajouter_Output("C.2" );
  253.                                          Channel_client := Stream (Client_Socket);
  254.                                          Ecran.Ajouter_Output("C.3" );
  255.                                          String'output(Channel_client,Line(1..Last));
  256.                                          Ecran.Ajouter_Output("D" );
  257.  
  258.                                          Close_socket(Client_Socket);
  259.                                       exception
  260.                                          when others => raise;
  261.                                       end;
  262.                                    when Quit =>
  263.                                       if Data /= null then
  264.                                          P_Reel.Save(Data.all);
  265.                                       end if;
  266.                                       if prev /= null then
  267.                                          P_Previsionnel.Save(Prev.all);
  268.                                       end if;
  269.                                       End_Of_Program.End_Of_Program := True;
  270.                                    when Help =>
  271.                                       declare
  272.                                          Char : Character;
  273.                                       begin
  274.                                          New_Line;
  275.                                          --Help;
  276.                                          New_Line(12);
  277.                                          Put("press any key to continue" );
  278.                                          Get_Immediate(Char);
  279.                                       end;
  280.                                    when Ia =>
  281.                                       Current_Ia_Id := T_Ia_Id'Value(Line(Index(Line," " )+1..last));
  282.                                       Current_Mode := Mode_Ia;
  283.                                    when Clear =>
  284.                                       Ecran.Clear_output;
  285.                                    when others =>
  286.                                       Put(Ascii.Bel);
  287.                                 end case;
  288.                              end if;
  289.                              Last := 0;
  290.                              Line := (others => Ascii.Nul);
  291.                           when Ascii.Del | Ascii.Bs =>
  292.                              if last /= 0 then
  293.                                 Line(last) := ' ' ;
  294.                                   last := last - 1 ;
  295.                              else
  296.                                 Put(Ascii.Bel);
  297.                              end if;
  298.                           when others =>
  299.                              Last := Last + 1;
  300.                              Line(Last) := char;
  301.                        end case;
  302.  
  303.                     end Recevoir;
  304.               or
  305.                  when Current_Mode = Mode_ia and then
  306.                    Current_Ia_Id = Id =>
  307.  
  308.                    accept Recevoir(Char : Character) do
  309.                        case Char is
  310.                           when Character'Val(10) =>
  311.                              if Last /= 0 then
  312.                                 Command := Value(Line(1..Last));
  313.                                 case Command is
  314.                                    when Null_Item =>
  315.                                       begin
  316.                                          Ecran.Ajouter_Output("C" );
  317.                                          Client_Addr.Addr := Addresses(Get_Host_By_Name("localhost" ));
  318.  
  319.                                          Ecran.Ajouter_Output("C.1" );
  320.                                          Connect_Socket(Client_Socket, Client_Addr);
  321.                                          Ecran.Ajouter_Output("C.2" );
  322.                                          Channel_client := Stream (Client_Socket);
  323.                                          Ecran.Ajouter_Output("C.3" );
  324.                                          String'output(Channel_client,Line(1..Last));
  325.                                          Ecran.Ajouter_Output("D" );
  326.  
  327.                                          Close_Socket(Client_Socket);
  328.                                       exception
  329.                                          when others => raise;
  330.                                       end;
  331.                                    when Quit =>
  332.                                       if Data /= null then
  333.                                          P_Reel.Save(Data.all);
  334.                                       end if;
  335.                                       if prev /= null then
  336.                                          P_Previsionnel.Save(Prev.all);
  337.                                       end if;
  338.                                       End_Of_Program.End_Of_Program := True;
  339.                                    when Help =>
  340.                                       declare
  341.                                          Char : Character;
  342.                                       begin
  343.                                          New_Line;
  344.                                          --Help;
  345.                                          New_Line(12);
  346.                                          Put("press any key to continue" );
  347.                                          Get_Immediate(Char);
  348.                                       end;
  349.                                    when Ia =>
  350.                                       Current_Ia_Id := T_Ia_Id'Value(Line(Index(Line," " )+1..last));
  351.                                       Current_Mode := Mode_Ia;
  352.                                    when others =>
  353.                                       Put(Ascii.Bel);
  354.                                 end case;
  355.                              end if;
  356.                              Last := 0;
  357.                              Line := (others => Ascii.Nul);
  358.                           when Ascii.Del | Ascii.Bs =>
  359.                              if last /= 0 then
  360.                                 Line(last) := ' ' ;
  361.                                   last := last - 1 ;
  362.                              else
  363.                                 Put(Ascii.Bel);
  364.                              end if;
  365.                           when others =>
  366.                              Last := Last + 1;
  367.                              Line(Last) := char;
  368.                        end case;
  369.  
  370.                     end Recevoir;
  371.               or
  372.  
  373.                  accept Recevoir(Msg : in String) do
  374.                     Ecran.Ajouter_Output(Msg);
  375.                  end Recevoir;
  376.               or
  377.                  delay 0.075;
  378.  
  379.                  if Current_Mode = Mode_ia then
  380.                     Move(Full_Datify_String(Clock),First_Line,Error,Center);
  381.                     if Current_Ia_Id = Id then
  382.                        Insert(First_Line,60, "Ia_Id: " & T_Ia_Id'Image(Id),right);
  383.                        Ecran.Clear_Input;
  384.                        Ecran.first_Line(First_Line);
  385.                        Ecran.Ajouter_Input(Line(1..Last));
  386.  
  387.                     elsif Current_Ia_Id = 0 then
  388.  
  389.  
  390.                        if Id = 1 then
  391.                           Insert(First_Line,60,"Ia GLOBAL",right);
  392.                           Ecran.Clear_Input;
  393.                           Ecran.first_Line(First_Line);
  394.                           Ecran.Ajouter_Input(Line(1..Last));
  395.                        end if;
  396.                     end if;
  397.                  end if;
  398.                  delay 0.075;
  399.               end select;
  400.            end loop;
  401.  
  402.            Put_Line("exit ia" );
  403.            abort Server;
  404.         exception
  405.            when others =>
  406.               raise;
  407.         end T_T_Ia;


Message édité par Profil supprimé le 03-01-2007 à 19:56:05
n°1498429
Profil sup​primé
Posté le 03-01-2007 à 19:56:43  answer
 

Après insertion d'informations de debugage, il apparait que je suis bloqué dans le client sur le connect_socket et dans le serveur sur check_selector. je mes à jour le code ci-dessus.


Message édité par Profil supprimé le 03-01-2007 à 20:20:30
n°1498466
Profil sup​primé
Posté le 03-01-2007 à 21:37:36  answer
 

Ca marche, merci

n°1498480
Profil sup​primé
Posté le 03-01-2007 à 22:01:49  answer
 

Maintenant je cherche à resourdre la grosse fuite de mêmoire.... les sources real_ia
 
A compter de l'envoi, ou reception du premier message, la memoire diminue constament.


Message édité par Profil supprimé le 03-01-2007 à 22:07:02
n°1498609
Profil sup​primé
Posté le 04-01-2007 à 10:40:38  answer
 

Je n'ai pas résolut mon problème de fuite de mémoire, et j'ai un autre problème concernant l'arret du programme qui ce termine par un Tasking_Error  ?
Quelqu'un ?
 
les  sources ::= real_ia


Message édité par Profil supprimé le 04-01-2007 à 10:43:14
n°1499315
Profil sup​primé
Posté le 05-01-2007 à 14:14:47  answer
 

Bonjour,
 
Je revien un peu sur mon programme Fmi ; Je souhaiterai faire un test, sous Windows, c'est plus simple.
 
Procedure à suivre
 
- lancer 'main.exe -d test' pour lancer le programme qui créra le fichier "test" qu'il faudra ensuite supprimer.
- appuyez sur F6
- verifiez que vous êtes en mmode connection réseau ... "Mode Connection_Reseau" est affiché en haut de fenetre.
- Tapez "get_prev denimes.net" ... ceci aura pour effet de charger les données depuis le serveur de denimes.net
 
le test est terminé, de mon côté je verifie sur le seveur que je reçois bien votre adresse IP courante.
 
-Tapez "quit"
 
l'executable à télécharger ::= main.exe
 
Merci

n°1499496
Profil sup​primé
Posté le 05-01-2007 à 18:29:22  answer
 

Pas même un petit retour ce soir, c'est deprimant  :sol:


Message édité par Profil supprimé le 05-01-2007 à 18:29:40
n°1499745
Profil sup​primé
Posté le 06-01-2007 à 14:24:08  answer
 

Bonjour  :hello: ,
 
 
Il ce trouve que j'ai encore un problème de terminaison de serveur malgrès avoir tout bien fait, et je but encore.
 
je declare une tache 'ai' dans laquelle je decalre une tache 'server' dans laquelle j'initialise des taches 'thread_server' qui attendent la commande STOP qui met fin au serveur. le programme attend "quit" au clavier.
 

Code :
  1. with End_Of_Program;
  2. with Alredy_Running;
  3.  
  4. with Erreurs_Types_Abstraits;
  5. use Erreurs_Types_Abstraits;
  6.  
  7. with Ada.Command_Line;
  8.  
  9. with Text_Io;
  10. use Text_Io;
  11. with ada.strings, ada.strings.fixed;
  12. use ada.strings, ada.strings.fixed;
  13.  
  14.  
  15. with Gnat.Os_Lib;
  16. use Gnat.Os_Lib;
  17.  
  18. with Calendar;
  19. use Calendar;
  20. with Time_To_Date, Split_heure;
  21. use Time_To_Date, Split_heure;
  22.  
  23.  
  24. with Gnat.Sockets;
  25. use Gnat.Sockets;
  26. with Ada.Exceptions;
  27. use Ada.Exceptions;
  28.  
  29. with Ada.Task_Identification;
  30. use Ada.Task_Identification;
  31.  
  32. with Ada.Unchecked_Deallocation;
  33.  
  34. with Ada.Command_Line;
  35. use Ada.Command_Line;
  36.  
  37. with My_ai;
  38. use My_ai;
  39.  
  40. procedure Ai_server is
  41.   function System(Command : in String) return Integer;
  42.   pragma Import(C, System, "system" );
  43.   Res : Integer := 0;
  44.  
  45.  
  46.   function Position(arg : String) return Natural is separate;
  47.   Char : Character;
  48.   begin
  49.      if Ada.Command_Line.Argument_Count = 0 then
  50.         Version.Version;
  51.         Copyright.Copyright;
  52.         License.License;
  53.         Usage.Default_Message;
  54.      else
  55.         declare
  56.            Pos_Gpl_Copy_Clause : Natural := Position("--copy_clause" );
  57.            Pos_Gpl_Warranty_Clause : Natural := Position("--warranty_clause" );
  58.      begin
  59.         if Pos_Gpl_Copy_Clause /= 0 then
  60.            Gpl_Copy_Clause.Gpl_Copy_Clause;
  61.         end if;
  62.         if Pos_Gpl_Warranty_Clause /= 0 then
  63.            Gpl_Warranty_Clause.Gpl_Warranty_Clause;
  64.         end if;
  65.      end;
  66.   end if;
  67.   if not End_Of_Program.End_Of_program and Alredy_Running.Alredy_Running then
  68.      loop
  69.         declare
  70.            Char : Character;
  71.         begin
  72.            Put_Line("Program alredy running ! 'q' or 'Q' to quit ; 'c' or 'C' to continu !" );
  73.            Get_Immediate(Char);
  74.            case Char is
  75.               when 'q' | 'Q' =>
  76.                 Raise Alredy_Running.Alredy_Running_Error;
  77.               when 'c' | 'C' =>
  78.                 Alredy_Running.Alredy_Running := True;
  79.               when others =>
  80.                  raise Erreur_Specification;
  81.            end case;
  82.            exit;
  83.         exception
  84.            when Erreur_specification =>
  85.               null;
  86.         end;
  87.  
  88.      end loop;
  89.   else
  90.      Alredy_Running.Alredy_Running := True;
  91.   end if;
  92.  
  93.   while not End_Of_Program.End_Of_Program loop
  94.      declare
  95.         task ai is
  96.            entry Recevoir(Char : in Character);
  97.         end ai;
  98.  
  99.         task body ai is
  100.  
  101.  
  102.            type T_Cmd is (Null_Item, Help, Quit);
  103.  
  104.            function Value(Command : String) return T_Cmd is
  105.               First_Space : positive := 1;
  106.            begin
  107.               while Command(First_Space) /= ' ' and then
  108.                 First_space < Command'Length loop
  109.                  First_Space := First_Space + 1;
  110.               end loop;
  111.               return T_Cmd'Value(Command(Index_Non_Blank(Command)..First_Space));
  112.            exception
  113.               when others =>
  114.                  return Null_Item;
  115.            end Value;
  116.  
  117.            Command : T_Cmd;
  118.            Line : String(1..880) := (others => Ascii.Nul);
  119.            Last : Natural := 0;
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.            task Server is
  128.               entry Start;
  129.               entry Stop;
  130.            end Server;
  131.  
  132.  
  133.  
  134.            task body Server is
  135.  
  136.               End_Of_Server : Boolean := False;
  137.               type Socket_Access is access Socket_type;
  138.  
  139.               task type Thread_server(Socket : Socket_access) is
  140.                  entry Get_Id(Id : out Task_Id);
  141.               end Thread_server;
  142.  
  143.  
  144.               task body Thread_server is
  145.                  Channel  : Stream_Access;
  146.  
  147.  
  148.                  Main_Mode : T_Main_Mode := Null_Item;
  149.  
  150.               begin
  151.                  accept Get_Id(Id : out Task_Id) do
  152.                     Id := Current_Task;
  153.                  end Get_Id;
  154.                  Channel := Stream (Socket.all);
  155.                  Put_Line(" Message from " &
  156.                           Image(Get_Address(channel)) & " ::=" );
  157.                  New_Line;
  158.                  Main_mode := T_Main_Mode'Input(Channel);
  159.                  Put_Line("stop 5" );
  160.                  case Main_Mode is
  161.                     when Null_Item =>
  162.                        null;
  163.                     when Stop =>
  164.                        Put_Line("stop 6" );
  165. --                        String'Output(Channel,"Arret du serveur" );
  166.                        Put_Line("stop 7" );
  167.                        End_Of_Server := True;
  168.                     when Login =>
  169.                        null;
  170.                     when Inscription =>
  171.                        null;
  172.                     when others =>
  173.                        raise  Erreur_Specification;
  174.                  end case;
  175.  
  176.                  Close_Socket(Socket.all);
  177.               end Thread_Server;
  178.  
  179.  
  180.               type Thread_Server_Access is access Thread_Server;
  181.  
  182.               type thread_server_Task is
  183.                  record
  184.                     Id : Task_Id := Null_Task_id;
  185.                     thread_server : thread_server_access;
  186.                  end record;
  187.               type thread_server_Task_Access is access thread_server_task;
  188.  
  189.  
  190.               procedure Unchecked_Deallocation_thread_server is
  191.                  new Ada.Unchecked_Deallocation(thread_server,thread_server_Access);
  192.               procedure Unchecked_Deallocation_thread_server_task is
  193.                  new Ada.Unchecked_Deallocation(thread_server_Task,thread_server_Task_Access);
  194.  
  195.  
  196.  
  197.  
  198.               Liste : array(1..10) of Socket_access;
  199.               Thread_Server_Liste : array(1..1) of Thread_Server_Task_Access;
  200.               Bliste : array(1..10) of Boolean;
  201.               Reads,Write : Socket_Set_Type;
  202.  
  203.               Selector : Selector_Type;
  204.               Srv_Adr,Adr : Sock_Addr_Type;
  205.               Srv_Socket : Socket_Type;
  206.               Status : Selector_Status;
  207.               package Intio is new Text_Io.Integer_Io(Integer);
  208.               Ptr : Integer := 0;
  209.               C : Character;
  210.  
  211.  
  212.  
  213.               function Chercher return Natural is
  214.               begin
  215.                  for I in 1..10 loop
  216.                     if liste(I) = null then
  217.                        return I;
  218.                     elsif Is_Terminated(Thread_Server_Liste(I).Id) then
  219.                        Unchecked_Deallocation_Thread_Server(Thread_Server_Liste(I).Thread_Server);
  220.                        Unchecked_Deallocation_Thread_Server_task(Thread_Server_Liste(I));
  221.                        return I;
  222.                     end if;
  223.                  end loop;
  224.                  return 0;
  225.               end Chercher;
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.               Channel  : Stream_Access;
  233.               Client_Suivant : Natural := 0;
  234.            begin
  235.               accept Start;
  236.               Srv_Adr.Addr := Inet_addr("192.168.1.100" );
  237.               Srv_Adr.Port := 5876;
  238.               Create_Socket(Srv_Socket);
  239.               Bind_Socket(Srv_Socket,Srv_Adr);
  240.               Listen_Socket(Srv_Socket);
  241.  
  242.               -- Creation
  243.               Create_Selector(Selector);
  244.               Set(Write,Srv_Socket);
  245.  
  246.               for I in 1..10 loop
  247.                  liste(I) := new Socket_Type;
  248.               end loop;
  249.               Bliste := (others => False);
  250.  
  251.  
  252.               loop
  253.  
  254.                  Empty(Reads);
  255.  
  256.                  Set(Reads,Srv_Socket);
  257.  
  258.                  for I in 1..10 loop
  259.                     if Bliste(I) then
  260.                        Set(Reads,Liste(I).all);
  261.                     end if;
  262.                  end loop;
  263.  
  264.                  Check_Selector(Selector,Reads,Write,Status);
  265.  
  266.                  case Status is
  267.                     when Completed =>
  268.  
  269.                        if Is_Set(Reads,Srv_Socket) then
  270.                           Client_Suivant := Chercher;
  271.                           if Client_Suivant /= 0 then
  272.                              Ptr := Client_Suivant;
  273.                              Put_Line("Connexion : "&Integer'Image(Ptr));
  274.                              Accept_Socket(Srv_Socket,Liste(Ptr).all,Adr);
  275.                              Bliste(Ptr) := True;
  276.                           end if;
  277.                        else
  278.                           Put_Line("toto 6" );
  279.                           for I in 1..10 loop
  280.                              if Bliste(I) then
  281.                                 if Is_Set(Reads,Liste(I).all) then
  282.                                    thread_server_Liste(i) := new thread_server_task;
  283.                                    thread_server_Liste(I).thread_server := new thread_server(Liste(i));
  284.                                    thread_server_Liste(i).thread_server.Get_Id(thread_server_Liste(i).Id);
  285.                                    Bliste(i) := false;
  286.                                 end if;
  287.                              end if;
  288.                           end loop;
  289.                        end if;
  290.                     when Expired =>
  291.                        Put_Line("expired" );
  292.  
  293.                     when Aborted =>
  294.                        Put_Line("aborted" );
  295.  
  296.                  end case;
  297.                  delay(0.2);
  298.                  exit when End_Of_Server;
  299.               end loop;
  300.               Put_Line("exit server ..." );
  301.               delay(1.0);
  302.               accept Stop;
  303.               Put_Line("end server ..." );
  304.            end Server;
  305.  
  306.         begin
  307.            Initialize;
  308.            Server.Start;
  309.            while not End_Of_Program.End_Of_Program Loop
  310.               select
  311.                  accept Recevoir(Char : in Character) do
  312.                     case Char is
  313.                        when Character'Val(10) =>
  314.                           if Last /= 0 then
  315.                              Command := Value(Line(1..Last));
  316.                              case Command is
  317.                                 when Null_Item =>
  318.                                    Put(Ascii.Bel);
  319.                                 when Quit =>
  320.                                    --                            if Data /= null then
  321.                                    --                               P_Reel.Save(Data.all);
  322.                                    --                            end if;
  323.                                    --                            if prev /= null then
  324.                                    --                               P_Previsionnel.Save(Prev.all);
  325.                                    --                            end if;
  326.                                    --
  327.  
  328.                                    declare
  329.                                       Client_socket : Socket_Type;
  330.                                       Client_addr : Sock_Addr_type;
  331.                                       Channel_Client : Stream_Access;
  332.                                    begin
  333.                                       Create_Socket(Client_Socket);
  334.                                       Set_Socket_Option
  335.                                         (Client_Socket,
  336.                                          Socket_Level,
  337.                                          (Reuse_Address, true));
  338.                                       Client_Addr.Port := 5876;
  339.                                       Client_Addr.Addr := Addresses(Get_Host_By_Name("localhost" ));
  340.                                       Connect_Socket(Client_Socket, Client_Addr);
  341.                                       Put_Line("stop 3" );
  342.                                       Channel_client := Stream (Client_Socket);
  343.                                       T_Main_mode'output(Channel_client,stop);
  344.                                       Put_Line("stop 4" );
  345. --                                       Put_Line(String'input(Channel_client));
  346.                                       Put_Line("stop 4.1" );
  347.                                       Close_socket(Client_Socket);
  348.                                    exception
  349.                                       when E: Gnat.Sockets.Socket_Error =>
  350.                                          Put_Line
  351.                                                  (Exception_Name (E) &
  352.                                                   ": " &
  353.                                                   Exception_Message (E));
  354.                                    end;
  355.                                    Put_Line("stop 1" );
  356.                                    Server.Stop;
  357.                                    Put_Line("stop 2" );
  358.                                    Finalize;
  359.                                    End_Of_Program.End_Of_Program := True;
  360.                                 when Help =>
  361.                                    declare
  362.                                       Char : Character;
  363.                                    begin
  364.                                       New_Line;
  365.                                       --Help;
  366.                                       New_Line(12);
  367.                                       Put("press any key to continue" );
  368.                                       Get_Immediate(Char);
  369.                                    end;
  370.                                 when others =>
  371.                                    Put(Ascii.Bel);
  372.                              end case;
  373.                           end if;
  374.                           Last := 0;
  375.                           Line := (others => Ascii.Nul);
  376.                        when Ascii.Del | Ascii.Bs =>
  377.                           if last /= 0 then
  378.                              Line(last) := ' ' ;
  379.                                last := last - 1 ;
  380.                           else
  381.                              Put(Ascii.Bel);
  382.                           end if;
  383.                        when others =>
  384.                           Last := Last + 1;
  385.                           Line(Last) := char;
  386.                     end case;
  387.                  end Recevoir;
  388.               or
  389.                  delay 0.0;
  390.                  Res := System("clear" & Ascii.Nul);
  391.                  New_Line(22);
  392.                  Put_Line("                           Taper 'quit' pour quitter." );
  393.                  Put(Line(1..Last));
  394.                  delay 0.075;
  395.               end select;
  396.            end loop;
  397.         end Ai;
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.      begin
  410.         while not End_Of_Program.End_Of_Program loop
  411.            Get_Immediate(Char);  -- Voila c'est plus clair ainsi.
  412.            Ai.Recevoir(Char); --
  413.  
  414.         end loop;
  415.      exception
  416.         when others =>
  417.            raise;
  418.      end;
  419.   end loop;
  420.  
  421.   Alredy_Running.Alredy_Running := False;
  422.   Ada.Command_Line.Set_Exit_Status(Ada.Command_Line.Success);
  423. exception
  424.   when Alredy_Running.Alredy_Running_Error =>
  425.      Put_Line("Real_Ia alredy running ... " );
  426. end Ai_server;


Message édité par Profil supprimé le 06-01-2007 à 14:43:56
n°1499760
Profil sup​primé
Posté le 06-01-2007 à 15:28:50  answer
 

[:dawa_neowen]  
 
En fait ce ne sont pas les bonne adresses, deja  :lol:

n°1499820
Profil sup​primé
Posté le 06-01-2007 à 20:29:58  answer
 

:cry:  Décidement, j'arrive pas à arreter ce serveur correctement ... ahrr
 
Personne  :p

n°1499886
Profil sup​primé
Posté le 07-01-2007 à 08:53:16  answer
 

Je ne comprends pas,
 
Si j'envoi seulement une commande d'arret "stop" et que je met directement En_Of_Server à True, ça marche,
Mais si je tente d'envoyer quelque message avant de mettre End_Of_Server à True, ça plante  :pt1cable:

n°1500229
Profil sup​primé
Posté le 08-01-2007 à 11:40:25  answer
 


Bonjour  :hello: ,
 
Voila, c'est pour un Storage_Error, j'ai mis des info de debug mais ça donne rien de direct,
Ca plante à la sortie du case "status" de 'Inscription' dans la tache "ai" donc à la reprise de son 'select'
 
Le code source d'un seveur avec appels en local intégrés ::= http://denimes.net/des_prog/Reseau/server.tgz
 
en gros, j'ai ça ::=
 

Code :
  1. ......
  2. ......
  3.                                       Status := T_Inscription'Input(Channel_Client);
  4.                                       case Status is
  5.                                          when My_ai.Success =>
  6.                                          New_Line(12);
  7.                                          Put_Line("                           Inscription terminee" );
  8.                                          New_Line(11);
  9.                                          delay 5.0;
  10.                                       when My_Ai.Failure =>
  11.                                          New_Line(12);
  12.                                          Put_Line("                           Inscription abandonnée" );
  13.                                          New_Line(11);
  14.                                          delay 5.0;
  15.                                       end case;
  16.                                       Put_Line("Close socket .." );
  17.                                       delay 3.0;
  18.                                       Close_socket(Socket);
  19.                                       Put_Line("Socket closed .." );
  20.                                       delay 3.0;
  21. ....
  22. ....


 
Et je plante entre le delay du status My_ai.success et put_line("Close socket" );
 
exactement l'erreur c'est ::= raised STORAGE_ERROR : s-intman.adb:124 explicit raise
 
 
Quelqu'un ?

n°1500234
Profil sup​primé
Posté le 08-01-2007 à 11:50:44  answer
 

De l'autre côté de la machine j'ai ça ::=  
 

Code :
  1. T_Inscription'Output(Channel,My_Ai.success);
  2.                           Put_Line("inscripton 6" );
  3.                           delay 3.0;


 
dont le delay ne s'execute pas non plus  :pt1cable:


Message édité par Profil supprimé le 08-01-2007 à 11:51:07
n°1500242
Profil sup​primé
Posté le 08-01-2007 à 12:12:50  answer
 

A zutee, plus rien ne marche en fait !
 
A+

n°1500251
Profil sup​primé
Posté le 08-01-2007 à 12:24:39  answer
 

C'est cette procedure en fait qui n'est pas valide ::=
 

Code :
  1. procedure Init(Filename : String) is
  2.  
  3.      enregistrement : T_Enregistrement;
  4.   begin
  5.      Open(Fichier,in_File,Filename);
  6.      while not End_Of_File(Fichier) loop
  7.         Read(Fichier,enregistrement);
  8.         if Liste.Tete = null then
  9.            Liste.Tete :=  new T_Element'(Enregistrement,null);
  10.            Liste.Courant := Liste.Tete;
  11.            Liste.Taille := 1;
  12.         else
  13.            Liste.Courant.Suivant := new T_Element'(Enregistrement,null);
  14.            Liste.Courant := Liste.Courant.Suivant;
  15.            Liste.Taille := Liste.Taille+ 1;
  16.         end if;
  17.      end loop;
  18.  
  19.      Close(Fichier);
  20.  
  21.   end Init;


 
Va savoir pourquoi ?

n°1500277
Profil sup​primé
Posté le 08-01-2007 à 13:39:15  answer
 

j'ai initialisé mon fichier, ce qui fait que la procedure de login fonctionne et maintenant c'est au logout que ça Storage_Error ... pourtant, il n'y à qu'un exit pour terminer le thread_server côté server et un logged := false côté client.
 
 
code du client ::=  
 

Code :
  1. when Null_Item =>
  2.                                    declare
  3.                                       Commande : T_Commande := value(Line(1..last));
  4.                                    begin
  5.                                       if Logged then
  6.                                          T_Commande'Output(Channel,commande);
  7.                                          case Commande is
  8.                                             when Logout =>
  9.                                                Commande := T_Commande'Input(Channel);
  10.                                                delay(2.0);
  11.                                             when others =>
  12.                                                Put(Ascii.Bel);
  13.                                          end case;
  14.                                       else
  15.                                          Put(Ascii.Bel);
  16.                                       end if;
  17.                                    end;


 
code du serveur ::=  

Code :
  1. loop
  2.                              commande := T_commande'Input(Channel);
  3.                              case commande is
  4.                                 when Logout =>
  5.                                    T_commande'Output(Channel,Logout);
  6.                                    exit;
  7.                                 when others =>
  8.                                    null;
  9.                              end case;
  10.                           end loop;


 
mais vu comme ça, je ne sais pas si c'est bien pertinant ?
 
il faut voir le code entier http://denimes.net/des_prog/Reseau/server.tgz

n°1500287
Profil sup​primé
Posté le 08-01-2007 à 13:57:59  answer
 

Y a rien qui marche correctement en fait, ce programme est trop sensible, y a un truc qui cloche  :??:

n°1500297
Profil sup​primé
Posté le 08-01-2007 à 14:18:14  answer
 

En fait ... mnh, je me demande si c'est pas mon compilo qui part parfois en vrille,
j'ai rien fait et maintenent ça marche, ...
 
Enfin sauf le logout qui lève toujours Storage_Error
Quelqu'un ?


Message édité par Profil supprimé le 08-01-2007 à 16:26:20
n°1500447
Profil sup​primé
Posté le 08-01-2007 à 17:28:17  answer
 

Bonjour, ou re,  
 
je cherche un compilo Gnat pour Windows avec support Gnat.Sockets et Gnat.Md5 en shareware
 
Si vous avez une adresse ... merci

n°1500487
Profil sup​primé
Posté le 08-01-2007 à 18:52:22  answer
 

J'ai trouvé un compilo,
j'ai tester, mais ça plante encore plus haut, je verai ça plus tard.
 
 
j'ai toujours mon problème de retour de logout .. sous Gnu/Linux Debian Sarge et Gnat 3.4
 

n°1500519
Profil sup​primé
Posté le 08-01-2007 à 20:03:47  answer
 

Un peu de serieux  [:dawa_neowen]  
 
 
Qu'est-ce qui cloche dans cette procedure d'initialisation d'une liste, avec un fichier sequentiel.
 

Code :
  1. procedure Init(Filename : String) is
  2.  
  3.      enregistrement : T_Enregistrement;
  4.   begin
  5.      Liste.Tete := null;
  6.      Liste.Taille := 0;
  7.      Open(Fichier,in_File,Filename);
  8.      while not End_Of_File(Fichier) loop
  9.         Read(Fichier,enregistrement);
  10.         if Liste.Tete = null then
  11.            Liste.Tete :=  new T_Element'(Enregistrement,null);
  12.            Liste.Courant := Liste.Tete;
  13.            Liste.Taille := 1;
  14.         else
  15.            Liste.Courant.Suivant := new T_Element'(Enregistrement,null);
  16.            Liste.Courant := Liste.Courant.Suivant;
  17.            Liste.Taille := Liste.Taille+ 1;
  18.         end if;
  19.      end loop;
  20.  
  21.      Close(Fichier);
  22.   exception
  23.         when End_Error =>
  24.            null;
  25.         when others =>
  26.            raise;
  27.      end Init;


 
Parce que le Storage error, il sort de la  :heink:

n°1500617
Profil sup​primé
Posté le 09-01-2007 à 06:43:35  answer
 

j'arrive pas à debuguer, please, help me !
 
       [:dawa_neowen]  
 
 
 
 
je vois pas le rapport entre le Storage_Error et la fin du Thread_Server, et non plus celui entre la fin du Thread_Server et la procedure Init .... c'est un gros bug à mon avis !

n°1500621
Profil sup​primé
Posté le 09-01-2007 à 07:12:29  answer
 



raised STORAGE_ERROR : s-intman.adb:124 explicit raise  


 
 
Je fait péter le code du paquetage englobant init.
 
Specification

Code :
  1. with Gnat.Md5;
  2. package Info_user is
  3.  
  4.    -- les types de l'element de bloc de liste
  5.   subtype T_Email_Address is String(1..64);
  6.   subtype T_Logname is String(1..32);
  7.   subtype T_Passwd is String(1..10);
  8.  
  9.   type T_Enregistrement is -- l'element de bloc de liste
  10.      record
  11.         Email_Address : T_Email_Address := (others => ' ');
  12.         Logname       : T_Logname := (others => Ascii.nul);
  13.         Passwd        : Gnat.Md5.Message_Digest;
  14.      end record;
  15.  
  16.  
  17.   function Exist(Logname : T_Logname) return Boolean;
  18.   function Alredy_registred(Email   : string) return Boolean;
  19.   function Rechercher(Logname : T_logname) return Gnat.Md5.Message_Digest;
  20.   procedure Inscrire(Nouveau : T_Enregistrement);
  21.   procedure Init(Filename : String);
  22.   procedure save(Filename : String);
  23.  
  24.  
  25.  
  26. end Info_user;


 
Corps : dans ce paquetage, j'utilise directement une liste.
 

Code :
  1. with direct_Io;
  2. with Text_Io;
  3. package body Info_User is
  4.  
  5.  
  6.  
  7.   Null_Message_Digest : Gnat.Md5.Message_Digest := (others => Ascii.Nul);
  8.  
  9.   package Enregistrement_Io is new direct_Io(T_Enregistrement);
  10.   use Enregistrement_Io;
  11.  
  12.  
  13.   type T_Element; -- Mes blocs de liste
  14.   type T_Element_Access is access T_Element;
  15.   type T_Element is
  16.      record
  17.         Element : T_Enregistrement;
  18.         Suivant : T_Element_Access;
  19.      end record;
  20.  
  21.  
  22.   type T_Liste is
  23.      record
  24.         Tete : T_Element_Access;
  25.         Courant : T_Element_Access;
  26.         Taille : Natural := 0;
  27.      end record;
  28.  
  29.  
  30.   -- la liste --
  31.   Liste : T_Liste;
  32.  
  33.   -- le fichier --
  34.   Fichier : File_Type;
  35.  
  36.  
  37.  
  38.  
  39.   procedure Init(Filename : String) is
  40.  
  41.      enregistrement : T_Enregistrement;
  42.   begin
  43.      Open(Fichier,inout_File,Filename);
  44.      if Size(Fichier) /= 0 then
  45.         Liste.Taille := 1;
  46.  
  47.         Read(Fichier,enregistrement);
  48.         Liste.Tete :=  new T_Element'(Enregistrement,null);
  49.         Liste.Courant := Liste.Tete;
  50.         Liste.Taille := 1;
  51.         if Size(Fichier) > 1 then
  52.            for I in 2..Size(Fichier) loop
  53.               Set_Index(Fichier,I);
  54.               Liste.Courant.Suivant := new T_Element'(Enregistrement,null);
  55.               Liste.Courant := Liste.Courant.Suivant;
  56.               Liste.Taille := Liste.Taille+ 1;
  57.            end loop;
  58.            Liste.Courant := Liste.Tete;
  59.         end if;
  60.  
  61.      end if;
  62.      Close(Fichier);
  63.   exception
  64.      when others =>
  65.         Close(Fichier);
  66.         raise;
  67.   end Init;
  68.  
  69.  
  70.  
  71.  
  72.   procedure save(Filename : String) is
  73.   begin
  74.      if Liste.Taille > 0 then
  75.         Text_Io.Put_Line("Save file ..." );
  76.         Open(Fichier,inout_File,Filename);
  77.         Text_Io.Put_Line("Save file ... open" );
  78.  
  79.         Liste.Courant := Liste.Tete;
  80.         for I in 1..Liste.Taille loop
  81.            Set_Index(Fichier,Count(I));
  82.            Text_Io.Put_Line("Ok list.tete /= null" );
  83.            Text_Io.Put_Line("Logname : " & liste.courant.element.logname);
  84.            Text_Io.Put_Line("Passwd  : " & liste.courant.element.passwd);
  85.            Write(Fichier, Liste.Courant.Element);
  86.            Text_Io.Put_Line("Save file ...write" );
  87.            Liste.Courant := Liste.Courant.Suivant;
  88.         end loop;
  89.         Close(Fichier);
  90.      end if;
  91.   exception
  92.      when others =>
  93.         Close(Fichier);
  94.   end Save;
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.   function Exist(Logname : T_logname) return Boolean is
  108.  
  109.   begin
  110.      if Liste.Courant /= null and then
  111.        Liste.Courant.Element.Logname = Logname then
  112.         return True;
  113.      else
  114.         Liste.Courant := Liste.Tete;
  115.      end if;
  116.      while Liste.Courant /= null and then
  117.        Liste.Courant.Element.Logname /= Logname loop
  118.         Liste.Courant := Liste.Courant.Suivant;
  119.      end loop;
  120.      if Liste.Courant /= null and then
  121.        Liste.Courant.Element.Logname = Logname then
  122.         return true;
  123.      else
  124.         return false;
  125.      end if;
  126.   end Exist;
  127.  
  128.   function Alredy_registred(Email   : string) return Boolean is
  129.   begin
  130.      if Liste.Courant /= null and then
  131.        ( Liste.Courant.Element.Email_Address  = Email) then
  132.         return True;
  133.      else
  134.         Liste.Courant := Liste.Tete;
  135.      end if;
  136.      while Liste.Courant /= null and then
  137.        Liste.Courant.Element.Email_Address /= email loop
  138.         Liste.Courant := Liste.Courant.Suivant;
  139.      end loop;
  140.      if Liste.Courant /= null and then
  141.        Liste.Courant.Element.Email_Address = email then
  142.         return true;
  143.      else
  144.         return false;
  145.      end if;
  146.   end Alredy_Registred;
  147.  
  148.  
  149.  
  150.   function Plus_Grand(Nouveau : T_Logname; Que : T_Logname) return Boolean is
  151.      Index : Positive := 1;
  152.   begin
  153.      if Character'Pos(Nouveau(Index)) > Character'Pos(Que(Index)) then
  154.         return True;
  155.      else
  156.         for I in 1.. T_Logname'Length Loop
  157.            Index := Index + 1;
  158.            if Character'Pos(Nouveau(Index)) < Character'Pos(Que(Index)) then
  159.               return False;
  160.            end if;
  161.         end loop;
  162.         return True;
  163.      end if;
  164.   end Plus_Grand;
  165.  
  166.  
  167.  
  168.   procedure Inscrire(Nouveau : T_Enregistrement) is
  169.      Nouveau_Element : T_Element_access;
  170.      Precedent : T_Element_Access := Liste.Tete;
  171.  
  172.   begin
  173.      if Liste.Tete = null then
  174.         Liste.Tete := new T_element ' (Nouveau,null);
  175.         Text_Io.Put_Line("inscription tete" );
  176.         delay(3.0);
  177.      else
  178.         Nouveau_Element := new T_element ' (Nouveau,null);
  179.         if Liste.Tete /= null and then
  180.           not Plus_Grand(Nouveau => Nouveau.Logname,
  181.                          Que => Liste.Tete.Element.logname) then
  182.            Nouveau_Element.Suivant := Liste.Tete;
  183.            Liste.Tete := Nouveau_element;
  184.         elsif Liste.Tete.suivant /= null then
  185.            Liste.Courant := Liste.Tete.suivant;
  186.            while Liste.Courant /= null and then
  187.              Plus_Grand(Nouveau => Nouveau.Logname,
  188.                         Que => Liste.Tete.Element.logname) loop
  189.               Precedent := Liste.Courant;
  190.               Liste.Courant := Liste.Courant.Suivant;
  191.            end loop;
  192.            Nouveau_element.Suivant := Liste.Courant.Suivant;
  193.            precedent.Suivant := Nouveau_element;
  194.         end if;
  195.      end if;
  196.      Liste.Taille := Liste.Taille+1;
  197.   end Inscrire;
  198.  
  199.   function Rechercher(Logname : T_logname) return Gnat.Md5.Message_Digest is
  200.   begin
  201.      if Liste.tete /= null and then
  202.        Liste.tete.Element.Logname = Logname then
  203.         Text_Io.Put_Line("Ok logname return passwd" );
  204.                        delay(3.0);
  205.         return Liste.tete.Element.Passwd;
  206.      else
  207.         Liste.Courant := Liste.Tete;
  208.      end if;
  209.      while Liste.Courant /= null and then
  210.        Liste.Courant.Element.Logname /= Logname loop
  211.         Liste.Courant := Liste.Courant.Suivant;
  212.      end loop;
  213.      if Liste.Courant /= null and then
  214.        Liste.Courant.Element.Logname = Logname then
  215.         return Liste.Courant.Element.Passwd;
  216.      else
  217.  
  218.         return Null_Message_Digest;
  219.      end if;
  220.   end Rechercher;
  221.  
  222.  
  223.  
  224.  
  225.  
  226. end Info_User;


 
Voila, et c'est l'utilisation de la prodecure Init qui fait planter le programme

n°1500628
Profil sup​primé
Posté le 09-01-2007 à 08:41:28  answer
 

En fait c'est dans le fichier principal que ça ce passe ...
J'ai déplacé dans le Thread_Server l'appel à Init et ça marche mais bon, je charge autant de fois la liste qu'il y a de log+inscription, c'est un peu génant.
 
Soit c'est un gros bug de compilo, soit c'est Ada qui supporte pas ... mais je ne vois pas quoi !
 
 
 
A ce jour, plusieurs questions reste en suspant dans ce topic
 
A+

n°1502436
Profil sup​primé
Posté le 12-01-2007 à 23:35:26  answer
 

Si quelqu'un peut profiter de ça server.tgz et client.tgz. Ca ne fonctionne pas, un problème de reseau chez moi, je ne peut pas tester correctement en fait, je ne sait pas si c'est ma config reseau ou si je me suis embrouillé dans le code.
 
Normalement vous demarrez le client, vous vous inscrivez sur un serveur, en l'occurence, la je n'ai pas terminé le code, c'est en dur sur "denimes.net", puis vous vous loggez en full-duplex. Bref pour plus d'informations ....  
 
A+

n°1502481
Profil sup​primé
Posté le 13-01-2007 à 10:05:25  answer
 

Y aurait-il une ame cheritable pour m'aider à verifier m'on implementation, en essayant une connection ... svp  :heink:

n°1502493
Profil sup​primé
Posté le 13-01-2007 à 11:33:50  answer
 

Up  [:dawa_neowen]  
 

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4

Aller à :
Ajouter une réponse
 

Sujets relatifs
Petite programme de calculatrice en C[VB.NET] Creer une petit navigateur web [Résolu]
[help needed] gros problème avec flash[réglé] Aide sur un petit script.
un petit script a essayerNews et tableau en array : un peu trop gros
Petit soucis pour téléchargement d'un fchierNavigation par page 10*10, petit soucis
[EasyPhp] Gros problème de lenteur avec MySQLRecherche algo ou programme pour détection de plan
Plus de sujets relatifs à : Petit programme pour faire ses comptes ; C'est quoi ce gros bug


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)