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

⟦d0edb97f1⟧ Ada Source

    Length: 15360 (0x3c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Orb, seg_057d43

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 Abonnement_Storage;
with Bounded_String;
with Byte_Defs;
with Contrat_Storage;
with Filter_Storage;
with Observator_Storage;
with Orb_Communication;
with Std_Types;
use Std_Types;
with Text_Io;  
with Utils;

package body Orb is
    procedure Type_Supervisor (Message : in out Messages.Obj_Msg) is
        Id : Natural := 0;
        Number : Natural := 1;
        Place : Natural := 1;
        Success : Boolean := False;
    begin
        case Messages.Get_Type_Msg (Message) is
            when Registration =>
                Text_Io.Put_Line ("demande d'enregistrement d'un objet");

                Id := Abonnement_Storage.Add
                         (Messages.Get_Client_Host (Message),
                          Messages.Get_Client_Socket (Message));
                Messages.Put_Source_Id (Message, Id);
                Success := Orb_Communication.Send
                              (Message, Abonnement_Storage.See_Name
                                           (Messages.Get_Source_Id (Message)),
                               Abonnement_Storage.See_Socket
                                  (Messages.Get_Source_Id (Message)));
                if Success then
                    Text_Io.Put_Line ("enregistrement realise : numero Id = " &
                                      Natural'Image (Id));
                else
                    Text_Io.Put_Line
                       ("enregistrement non realise car la connexion a echoue");
                    Abonnement_Storage.Delete (Id);
                end if;

            when Unregistration =>
                Text_Io.Put_Line ("demande de retrait d'un objet ");
                Messages.Put_Content
                   (Message, "confirmation : ordre d'unregistration recu");
                Id := Messages.Get_Source_Id (Message);
                Success := Orb_Communication.Send
                              (Message, Abonnement_Storage.See_Name (Id),
                               Abonnement_Storage.See_Socket (Id));
                if Success then
                    Abonnement_Storage.Delete (Id);
                    Contrat_Storage.Delete (Id);
                    Observator_Storage.Delete (Id);
                    Filter_Storage.Delete (Id);
                    Text_Io.Put_Line ("enregistrement resilie ");
                else
                    Text_Io.Put_Line
                       ("enregistrement non resilie car la connexion de confirmation a echoue");
                end if;

            when Query =>  
                Text_Io.Put_Line ("demande de maintenance");  
                Id := Messages.Get_Source_Id (Message);  
                while Abonnement_Storage.Is_Member (Number) loop
                    Success :=
                       Orb_Communication.Send
                          (Messages.Create
                              (Typ => Forward,
                               Msg => String_To_String_Var
                                         (" N.Identification : " &
                                          Natural'Image (Number) & Ascii.Lf &
                                          "               " & "N.Socket: " &
                                          Utils.Byte_String_To_String
                                             (Byte_Defs.Byte_String
                                                 (Abonnement_Storage.See_Socket
                                                     (Number))) &
                                          Ascii.Lf & "              " &
                                          " Adr. IP machine: " &
                                          Utils.Byte_String_To_String
                                             (Byte_Defs.Byte_String
                                                 (Abonnement_Storage.See_Name
                                                     (Number)))),
                               Source => Messages.Get_Source_Id (Message),
                               Target => Messages.Get_Source_Id (Message),
                               Order => Messages.Get_Order_Msg (Message)),
                           Abonnement_Storage.See_Name (Id),
                           Abonnement_Storage.See_Socket (Id));
                    Text_Io.Put_Line ("envoie info de maintenance : " &
                                      Natural'Image (Number));
                    Number := Number + 1;  
                end loop;
                Success :=
                   Orb_Communication.Send
                      (Messages.Create
                          (Typ => Forward,
                           Msg =>
                              String_To_String_Var
                                 ("---------- Fin de la liste des abonnes ----------"),
                           Source => Messages.Get_Source_Id (Message),
                           Target => Messages.Get_Source_Id (Message),
                           Order => 0),
                       Abonnement_Storage.See_Name (Id),
                       Abonnement_Storage.See_Socket (Id));

            when Request =>
                Text_Io.Put_Line ("demande de travail");
                Id := Contrat_Storage.Search
                         (Messages.Get_Content (Message), Place);
                loop
                    if Abonnement_Storage.Is_Member (Id) then
                        Success :=
                           Orb_Communication.Send
                              (Message, Abonnement_Storage.See_Name (Id),
                               Abonnement_Storage.See_Socket (Id));
                        if Success then
                            Text_Io.Put_Line ("message envoye pour la requete");
                            exit when Success;
                        else
                            Text_Io.Put_Line
                               ("le serveur concerne  n'est plus enregistre, recherche d'un autre");
                            Place := Place + 1;
                            Id := Contrat_Storage.Search
                                     (Messages.Get_Content (Message), Place);
                            if Id = 0 then
                                Text_Io.Put_Line
                                   ("Il n'y a plus de serveur concerne, la connexion a echouee");
                                exit;
                            end if;
                        end if;
                    end if;
                end loop;

            when Notification =>
                Text_Io.Put_Line ("demande d'information");
                -- a faire;
                Text_Io.Put_Line (" non realise");

            when Forward =>
                Text_Io.Put_Line ("demande de propagation de message");

                Filter_Storage.Init_Iterator;

                if (not Filter_Storage.Is_Finish and
                    Messages.Get_Order_Msg (Message) /= 0) then
                    while not Filter_Storage.Is_Finish loop
                        Id := Filter_Storage.Get_Id;
                        Success :=
                           Orb_Communication.Send
                              (Message, Abonnement_Storage.See_Name (Id),
                               Abonnement_Storage.See_Socket (Id));
                    end loop;  
                else  
                    Id := Messages.Get_Target_Id (Message);
                    Success := Orb_Communication.Send
                                  (Message, Abonnement_Storage.See_Name (Id),
                                   Abonnement_Storage.See_Socket (Id));
                    if Success then
                        Text_Io.Put_Line ("envoi  realise");
                    else
                        Text_Io.Put_Line
                           ("l'envoi n'a pu etre realise car la cible est absente");
                    end if;

                    Observator_Storage.Init_Iterator;
                    while not Observator_Storage.Is_Finish loop  
                        Id := Observator_Storage.Get_Id;
                        Success :=
                           Orb_Communication.Send
                              (Message, Abonnement_Storage.See_Name (Id),
                               Abonnement_Storage.See_Socket (Id));
                    end loop;
                end if;

            when Publication =>
                Text_Io.Put_Line ("demande d'enregistrement de contrat");
                Contrat_Storage.Add (Messages.Get_Content (Message),
                                     Messages.Get_Source_Id (Message));
                Text_Io.Put_Line ("stockage du contrat realise");

            when Unpublication =>
                Text_Io.Put_Line ("demande de retrait de contrat");
                Contrat_Storage.Delete (Messages.Get_Content (Message),
                                        Messages.Get_Source_Id (Message));
                Text_Io.Put_Line (" retrait de contrat realise");

            when Subscription =>
                Text_Io.Put_Line ("demande d'abonnement espion");
                if Abonnement_Storage.Is_Member
                      (Messages.Get_Source_Id (Message)) then
                    Observator_Storage.Add (Messages.Get_Source_Id (Message));
                    Text_Io.Put_Line (" abonnement espion realise");
                end if;

            when Unsubscription =>
                Text_Io.Put_Line ("demande de retrait d'abonnement espion");
                Observator_Storage.Delete (Messages.Get_Source_Id (Message));
                Text_Io.Put_Line ("abonnement espion resilie ");

            when Filtration =>
                Text_Io.Put_Line ("demande d'enregistrement de filtre");
                if Abonnement_Storage.Is_Member
                      (Messages.Get_Source_Id (Message)) then
                    Filter_Storage.Add (Messages.Get_Source_Id (Message));
                    Text_Io.Put_Line (" abonnement filtre realise");
                end if;

            when Unfiltration =>
                Text_Io.Put_Line ("demande de retrait  de filtre");
                Filter_Storage.Delete (Messages.Get_Source_Id (Message));
                Text_Io.Put_Line ("abonnement filtre resilie");

            when others =>
                Text_Io.Put_Line ("Le type de requete ne convient pas");
                --envoyer message a la source

        end case;
    end Type_Supervisor;
end Orb;

E3 Meta Data

    nblk1=e
    nid=a
    hdr6=1a
        [0x00] rec0=1f rec1=00 rec2=01 rec3=026
        [0x01] rec0=00 rec1=00 rec2=0d rec3=04a
        [0x02] rec0=13 rec1=00 rec2=07 rec3=050
        [0x03] rec0=15 rec1=00 rec2=09 rec3=038
        [0x04] rec0=0e rec1=00 rec2=0b rec3=022
        [0x05] rec0=12 rec1=00 rec2=0e rec3=018
        [0x06] rec0=09 rec1=00 rec2=0c rec3=020
        [0x07] rec0=11 rec1=00 rec2=04 rec3=024
        [0x08] rec0=19 rec1=00 rec2=08 rec3=03a
        [0x09] rec0=15 rec1=00 rec2=02 rec3=008
        [0x0a] rec0=0e rec1=00 rec2=03 rec3=028
        [0x0b] rec0=14 rec1=00 rec2=06 rec3=054
        [0x0c] rec0=0b rec1=00 rec2=05 rec3=000
        [0x0d] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x21765177e87d19ad5b3d4 0x42a00088462060003
Free Block Chain:
  0xa: 0000  00 00 01 60 80 24 41 62 6f 6e 6e 65 6d 65 6e 74  ┆   ` $Abonnement┆