DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦eb003657f⟧ Ada Source

    Length: 10240 (0x2800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Client2, seg_056a9f

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



with Text_Io;
with Transport;
with Communication;
with V_String;  
with Competence_Heure;

package body Client2 is

    Connection1, Connection2 : Transport.Connection_Id;  
    Ouverture_Reception : Boolean := False;
    Arret_General : Boolean := False;
    Dernier_Message : Boolean := False;

    task Emission1 is
        entry Emission_Message (O : in out Message.Objet);
        entry Arret;
        entry Go;
    end Emission1;

    task Reception2 is
        entry Arret;
        entry Go;
    end Reception2;

    procedure Traitement (O : in out Message.Objet);

    task body Emission1 is
        O : Message.Objet;
        Stop : Boolean := False;
        Dest : Integer := 0;
        use Message;
    begin  
        loop  
            accept Go do
                Communication.Ouvrir_Autre (Connection1);  
                while not Ouverture_Reception loop
                    Text_Io.Put_Line ("reception non ouverte");
                end loop;
                Message.Enregistrement (O);
                Message.Emission (O, Connection1, Connection2);
                Text_Io.Put_Line ("enregistrement client effectue");
            end Go;
            loop
                select
                    accept Emission_Message (O : in out Message.Objet) do
                        Message.Emission (O, Connection1, Connection2);
                        if Message.Consulter_Typ (O) =
                           Message.Service_Result then
                            Dernier_Message := True;
                            Dest := Message.Consulter_Destinataire (O);
                        end if;
                        Text_Io.Put_Line ("message transmis");  
                    end Emission_Message;

                or
                    accept Arret do
                        Communication.Fermer (Connection1);
                        Stop := True;
                    end Arret;
                else
                    if Dernier_Message then  
                        Dernier_Message := False;
                        Message.Modifier_Typ (O, Message.Unregistration);
                        Message.Modifier_Expediteur (O, Dest);
                        Message.Emission (O, Connection1, Connection2);
                    end if;
                end select;
                exit when Stop;
            end loop;  
            exit when Stop;
        end loop;
        Text_Io.Put_Line ("fin emission");  
    end Emission1;

    task body Reception2 is  
        O : Message.Objet;
        Stop : Boolean := False;
    begin  
        loop
            accept Go do
                Communication.Ouvrir_Autre (Connection2);
                Ouverture_Reception := True;
            end Go;
            loop
                select
                    accept Arret do
                        Communication.Fermer (Connection2);
                        Stop := True;
                    end Arret;

                else
                    Text_Io.Put_Line ("avant reception client");
                    if Arret_General = True then
                        Communication.Fermer (Connection2);
                        Stop := True;
                    else  
                        Message.Reception (O, Connection2);
                        Text_Io.Put_Line ("apres reception client");
                        Message.Afficher (O);
                        Text_Io.Put_Line ("fin affichage");
                        Traitement (O);
                    end if;
                end select;
                exit when Stop;
            end loop;
            exit when Stop;
        end loop;
        Text_Io.Put_Line ("fin reception");
        Text_Io.Put_Line ("fermeture generale");
    end Reception2;

    procedure Traitement (O : in out Message.Objet) is  
        Typ : Message.Type_Message;
        Service : V_String.Variable_String := Competence_Heure.Service;
    begin
        Text_Io.Put_Line ("debut traitement");
        Typ := Message.Consulter_Typ (O);
        case Typ is

--cas valables pour les clients et les serveurs

            when Message.Answer_Registration =>
                Text_Io.Put_Line ("answer_registration arrive du cote client");
                Text_Io.Put_Line ("**************************************");
                Text_Io.Put_Line
                   (" mon identificateur unique est : " &
                    Integer'Image (Message.Consulter_Expediteur (O)));
                Text_Io.Put_Line ("*************************************");
                Message.Incrementer_Ordre (O);
                Traitement_Bis (O);  
                Emission1.Emission_Message (O);
            when Message.Answer_Unregistration =>
                Text_Io.Put_Line ("accuse reception unregistration");
                Arret;

                -- cas pour les clients

            when Message.Your_Answer =>
                Text_Io.Put_Line
                   ("reponse au service demande arrive chez le client");
                Arret;
            when Message.Service_Not_Available =>
                Text_Io.Put_Line
                   ("je suis decu, le service demande n'existe pas");
                Arret;

                --cas pour les serveurs

            when Message.Service_Added =>
                Text_Io.Put_Line
                   ("accuse reception de l'enregistrement du service");
                Message.Incrementer_Ordre (O);  
            when Message.Message_For_Server =>
                Text_Io.Put_Line ("demande de service pour le serveur");  
                Message.Modifier_Donnee (O, Competence_Heure.Give_Time);
                Message.Modifier_Typ (O, Message.Service_Result);
                Emission1.Emission_Message (O);  
            when others =>  
                Text_Io.Put_Line ("autre cas non traite donc arret de l'orb");
                Arret;
        end case;
    end Traitement;

    procedure Mise_En_Route is
    begin
        Reception2.Go;
        Emission1.Go;
    end Mise_En_Route;

    procedure Arret is
    begin
        Emission1.Arret;  
        Arret_General := True;
    end Arret;

end Client2;

E3 Meta Data

    nblk1=9
    nid=2
    hdr6=10
        [0x00] rec0=26 rec1=00 rec2=01 rec3=06e
        [0x01] rec0=16 rec1=00 rec2=09 rec3=036
        [0x02] rec0=15 rec1=00 rec2=06 rec3=026
        [0x03] rec0=19 rec1=00 rec2=08 rec3=012
        [0x04] rec0=18 rec1=00 rec2=05 rec3=026
        [0x05] rec0=09 rec1=00 rec2=03 rec3=00c
        [0x06] rec0=15 rec1=00 rec2=07 rec3=074
        [0x07] rec0=12 rec1=00 rec2=04 rec3=000
        [0x08] rec0=18 rec1=00 rec2=04 rec3=000
    tail 0x21763083887c49c452eee 0x42a00088462060003
Free Block Chain:
  0x2: 0000  00 00 00 12 80 0f 65 63 65 70 74 69 6f 6e 20 6e  ┆      eception n┆