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

⟦8c1dafef0⟧ Ada Source

    Length: 13312 (0x3400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Gestion_Orb, seg_056a17

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 Gestion_Table;
with V_String;
with Utils;
with Byte_Defs;

package body Gestion_Orb is

    Competence_Found : Boolean;

    procedure Traite_Objet (Objet_Traite : in out Message.Objet;
                            Socket_Recep : Transport_Defs.Socket_Id;
                            Host_Recep : Transport_Defs.Host_Id;
                            Socket_Emis : in out Transport_Defs.Socket_Id;
                            Host_Emis : in out Transport_Defs.Host_Id) is
        All_Seen : Boolean;
        Service_Available_Orb : Boolean;
        Ordre_Mes : Integer;
        Type_Of_Object : Message.Type_Message;
        Indice_Trouve : Integer;
    begin
        --Text_Io.Put_Line ("Gestion_Orb::Traite_objet -- entree");
        Type_Of_Object := Message.Consulter_Typ (Objet_Traite);
        case Type_Of_Object is
            when Message.Registration =>
                begin
                    -- Text_Io.Put_Line
                    --    ("Gestion_Orb::Traite_Objet -- entree dans Registration");
                    Message.Modifier_Expediteur
                       (Objet_Traite, Registration_Of_Server
                                         (Socket_Recep, Host_Recep));
                    Message.Modifier_Typ (Objet_Traite,
                                          Message.Answer_Registration);
                    Socket_Emis := Socket_Recep;
                    Host_Emis := Host_Recep;
                end;
            when Message.Publication =>
                begin
                    -- Text_Io.Put_Line
                    --    ("Gestion_orb::Traite_objet -- entree dans publication");
                    Add_Service (V_String.Image
                                    (Message.Consulter_Donnee (Objet_Traite)),
                                 Message.Consulter_Expediteur (Objet_Traite));
                    -- Text_Io.Put_Line
                    --    ("Gestion_Orb::Traite_Objet -- publication fin ad_service");
                    Message.Modifier_Typ (Objet_Traite, Message.Service_Added);
                    -- Text_Io.Put_Line
                    --   ("Gestion_Orb::Traite_Objet -- publication fin modif_type");
                    Give_Host_Socket_Of_Indice
                       (Message.Consulter_Expediteur (Objet_Traite),
                        Host_Emis, Socket_Emis);

                    -- Text_Io.Put_Line
                    --    ("host_emis : " &
                    --     Utils.Byte_String_To_String
                    --        (Byte_Defs.Byte_String (Host_Emis)) & "sock : " &
                    --      Utils.Byte_String_To_String
                    --        (Byte_Defs.Byte_String (Socket_Emis)));
                end;
            when Message.Request =>
                begin
                    Ordre_Mes := 0;
                    --Text_Io.Put_Line ("Gestion_orb::debut de request");
                    --Text_Io.Put_Line (V_String.Image (Message.Consulter_Donnee
                    --                                     (Objet_Traite)));

                    Get_Host_Socket_Of_Service
                       (V_String.Image (Message.Consulter_Donnee
                                           (Objet_Traite)),
                        Ordre_Mes, Host_Emis, Socket_Emis,
                        Indice_Trouve, All_Seen, Service_Available_Orb);
                    -- Text_Io.Put_Line ("getion_orb::available:");
                    Message.Modifier_Typ (Objet_Traite,
                                          Message.Message_For_Server);
                    Message.Modifier_Destinataire (Objet_Traite, Indice_Trouve);
                    if Service_Available_Orb = False then
                        Message.Modifier_Typ (Objet_Traite,
                                              Message.Service_Not_Available);
                        Message.Modifier_Destinataire
                           (Objet_Traite, Message.Consulter_Expediteur
                                             (Objet_Traite));
                        Give_Host_Socket_Of_Indice
                           (Message.Consulter_Expediteur (Objet_Traite),
                            Host_Emis, Socket_Emis);
                    end if;
                    -- Text_Io.Put_Line ("gestion_orb::traite_objet:host:" &
                    --                   Utils.Byte_String_To_String
                    --                      (Byte_Defs.Byte_String (Host_Emis)));
                    -- Text_Io.Put_Line ("gestion_orb::traite_ojet:socket:" &
                    --                   Utils.Byte_String_To_String
                    --                      (Byte_Defs.Byte_String (Socket_Emis)));

                end;
            when Message.Service_Result =>
                begin
                    Message.Modifier_Typ (Objet_Traite, Message.Your_Answer);
                    Give_Host_Socket_Of_Indice
                       (Message.Consulter_Expediteur (Objet_Traite),
                        Host_Emis, Socket_Emis);

                end;  
            when Message.Unregistration =>
                begin
                    --Text_Io.Put_Line
                    -- ("debut gestion orb unregistration de l'objet numero " &
                    -- Integer'Image (Message.Consulter_Expediteur
                    --                  (Objet_Traite)));
                    Gestion_Table.Disable
                       (Message.Consulter_Expediteur (Objet_Traite));
                    --  Text_Io.Put_Line ("gestion orb apres disable");
                    Message.Modifier_Typ (Objet_Traite,
                                          Message.Answer_Unregistration);
                    -- Text_Io.Put_Line ("gestion orb type modifie");
                    Give_Host_Socket_Of_Indice
                       (Message.Consulter_Expediteur (Objet_Traite),
                        Host_Emis, Socket_Emis);
                    -- Text_Io.Put_Line
                    --  ("gestion_orb recuperation socket et host");

                end;
            when others =>
                begin
                    Text_Io.Put_Line
                       ("Gestion_orb::Traite_Objet : erreur sur le type du message ---------------------");
                end;
        end case;
    end Traite_Objet;

    function Registration_Of_Server
                (Nsocket : Transport_Defs.Socket_Id;
                 Hname : Transport_Defs.Host_Id) return Integer is
    begin
        return Gestion_Table.Add_Item_Tab_A (Nsocket, Hname);
    end Registration_Of_Server;

    procedure Add_Service (Competence : String; Ident_I : Integer) is
    begin
        Gestion_Table.Add_Service_Tab_B (Competence, Ident_I);
    end Add_Service;

    procedure Get_Host_Socket_Of_Service
                 (Competence : String;
                  Ordre : in out Integer;
                  Hname : in out Transport_Defs.Host_Id;
                  Socket : in out Transport_Defs.Socket_Id;
                  Indice_Tab_A_Trouve : in out Integer;
                  All_Seen : in out Boolean;
                  Serv_Available : in out Boolean) is
        Enabled_Ordre : Boolean;
        Indice_Tab_A : Integer := 1;
    begin
        loop
            Gestion_Table.Return_Contenu_Liste_Position
               (Gestion_Table.Return_Liste_Tab_B (Competence), Ordre,
                Indice_Tab_A, Enabled_Ordre, All_Seen, Competence_Found);
            exit when (Enabled_Ordre = True or All_Seen = True or
                       Competence_Found = False);
            Ordre := Ordre + 1;
            --Text_Io.Put_Line
            --   ("gestion_orb::get_host_socket_of_service: ordre :" &
            --    Integer'Image (Ordre) & "indice_trouve" &
            --    Integer'Image (Indice_Tab_A));
        end loop;
        --Text_Io.Put_Line ("apres trouve : " & Integer'Image (Indice_Tab_A));
        if Competence_Found = False or Enabled_Ordre = False then
            Serv_Available := False;
            --    Text_Io.Put_Line
            --     ("Gestion_Orb::Get_Host_Socket_Of_Service : partie comptence_found = false");
            All_Seen := False;
            Indice_Tab_A_Trouve := 1;
        else
            --   Text_Io.Put_Line
            --      ("Gestion_Orb::Get_Host_Socket_Of_Service : partie comptence_found = true");
            Serv_Available := True;
            Gestion_Table.Give_Host_Socket_Tab_A (Indice_Tab_A, Hname, Socket);
            -- Text_Io.Put_Line ("gestion_orb::get_host_...:host trouve et emis" &
            --                   Utils.Byte_String_To_String
            --                    (Byte_Defs.Byte_String (Hname)));
            -- Text_Io.Put_Line ("socket trouve et emis" &
            --Utils.Byte_String_To_String (Byte_Defs.Byte_String (Socket));
            Indice_Tab_A_Trouve := Indice_Tab_A;
            -- Text_Io.Put_Line ("gestion_orb::get_host_socket_of_service:FIN");
        end if;
        --Text_Io.Put_Line ("gestion_orb::Get_Host_Socket_Of_Service : FIN");
        --Text_Io.Put_Line
        -- ("gestion_orb::Get_host_socket_of_service : renvoye : " &
        --Boolean'Image (Serv_Available));
    end Get_Host_Socket_Of_Service;

    procedure Give_Host_Socket_Of_Indice
                 (Indice : Integer;
                  Hname : in out Transport_Defs.Host_Id;
                  Socket : in out Transport_Defs.Socket_Id) is
    begin
        Gestion_Table.Give_Host_Socket_Tab_A (Indice, Hname, Socket);  
    end Give_Host_Socket_Of_Indice;

    procedure Init_Tableaux is
    begin
        Gestion_Table.Init_Tab_B;
    end Init_Tableaux;

end Gestion_Orb;

E3 Meta Data

    nblk1=c
    nid=3
    hdr6=14
        [0x00] rec0=1d rec1=00 rec2=01 rec3=01e
        [0x01] rec0=11 rec1=00 rec2=05 rec3=076
        [0x02] rec0=13 rec1=00 rec2=0c rec3=05a
        [0x03] rec0=10 rec1=00 rec2=02 rec3=052
        [0x04] rec0=12 rec1=00 rec2=0a rec3=01a
        [0x05] rec0=12 rec1=00 rec2=07 rec3=056
        [0x06] rec0=1c rec1=00 rec2=06 rec3=028
        [0x07] rec0=14 rec1=00 rec2=09 rec3=06e
        [0x08] rec0=11 rec1=00 rec2=08 rec3=060
        [0x09] rec0=17 rec1=00 rec2=0b rec3=000
        [0x0a] rec0=09 rec1=00 rec2=03 rec3=000
        [0x0b] rec0=13 rec1=00 rec2=04 rec3=001
    tail 0x21762f8b687c49707eee1 0x42a00088462060003
Free Block Chain:
  0x3: 0000  00 04 00 11 80 0e 74 72 69 6e 67 2e 49 6d 61 67  ┆      tring.Imag┆
  0x4: 0000  00 00 02 7f 80 13 74 65 5f 53 74 72 69 6e 67 5f  ┆      te_String_┆