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

⟦a98eceaf4⟧ Ada Source

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

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 Server_Object;
with Channel_Operator_To_Bal;
with Transport_Defs;
with Answers_Array;
with Bls_Constant;
with Parametre;
with Bounded_String;
with Parametre_Defs;
with Message;
with Utils;
with Byte_Defs;
with Liste_Parametre;
with Queue_Parametre;
with Queue_Parametre_Utils;
with My_Channel_User;  
with Channel_Operator;
with Channel_Operator;
with Task_Io;

package body Generic_Request_To_Orb is
    Liaison_To_Orb : My_Channel_User.Object;
    Liaison_From_Orb : Channel_Operator.Object;
    Number : Parametre_Defs.Message_Number;
    This_Object : Parametre_Defs.Identificator;
    Local_Socket : Transport_Defs.Socket_Id
                      (1 .. Bls_Constant.Size_Of_Our_Socket_Id);
    Local_Host : Transport_Defs.Host_Id (1 .. Bls_Constant.Size_Of_Address) :=
       (193, 54, 146, 133);
    Class_Of_Object : Parametre.Variable_String;
    package The_Server is new Server_Object
                                 (Server_Work, Subscription_Treatement);


    function Subscription
                (Class : String;
                 Object : Parametre_Defs.Identificator;
                 Method : String) return Parametre_Defs.Message_Number is
        The_Class, The_Method : Parametre.Variable_String;
        Message_To_Orb : Message.Object;  
        List_Containt : Liste_Parametre.List;
    begin  
        Task_Io.Put_Line ("souscription aupres d'un objet.");
        Bounded_String.Copy (The_Class, Class);
        List_Containt := Liste_Parametre.Make (The_Class, List_Containt);
        Bounded_String.Copy (The_Method, Method);
        List_Containt := Liste_Parametre.Make (The_Method, List_Containt);
        Parametre_Defs.Increment (Number);
        Message.Create (Message_To_Orb, This_Object, Object,
                        Parametre_Defs.Subsc, Number, List_Containt);
        Message.Send (Message_To_Orb, Liaison_To_Orb);
        return Number;
    end Subscription;

    procedure Get_Emet_Answer (The_Number : Parametre_Defs.Message_Number;
                               Emet : out Parametre_Defs.Identificator;
                               Out_Parametres : out Liste_Parametre.List) is
    begin  
        Answers_Array.Get (Answers_Array.Index'Value (String (The_Number)),
                           Emet, Out_Parametres);
    end Get_Emet_Answer;

    procedure Get_Answer (The_Number : Parametre_Defs.Message_Number;
                          Out_Parametres : out Liste_Parametre.List) is
    begin
        Answers_Array.Get
           (Answers_Array.Index'Value (String (The_Number)), Out_Parametres);
    end Get_Answer;

    function Answer_Arrived
                (The_Number : Parametre_Defs.Message_Number) return Boolean is
        The_Number_Index : Answers_Array.Index;
    begin
        return Answers_Array.Is_Arrived
                  (Answers_Array.Index'Value (String (The_Number)));
    end Answer_Arrived;

    procedure Init (Socket : Transport_Defs.Socket_Id;
                    Host : Transport_Defs.Host_Id;
                    Resultat : out Boolean) is
        Message_To_Orb : Message.Object;
        Contenu_Message : Liste_Parametre.List;
        Resultat_Intermediaire, Resultat_Intermediaire_2 : Boolean;
        Byte_String_Temp : Byte_Defs.Byte_String (1 .. 6);
    begin
        This_Object := Parametre_Defs.Unknown_Object;
        Channel_Operator.Init (O => Liaison_From_Orb,
                               Result => Resultat_Intermediaire);
        Local_Socket := Channel_Operator.Get_Socket_Id (Liaison_From_Orb);  
        Local_Host := Channel_Operator.Get_Host_Id (Liaison_From_Orb);
        My_Channel_User.Init (Liaison_To_Orb, Socket, Host,
                              Resultat_Intermediaire_2);
        Byte_String_Temp (1 .. Bls_Constant.Size_Of_Our_Socket_Id) :=
           Byte_Defs.Byte_String (Local_Socket
                                     (1 .. Bls_Constant.Size_Of_Our_Socket_Id));
        Byte_String_Temp (1 + Bls_Constant.Size_Of_Our_Socket_Id ..
                             Bls_Constant.Size_Of_Our_Socket_Id +
                                Bls_Constant.Size_Of_Address) :=
           Byte_Defs.Byte_String (Local_Host
                                     (1 .. Bls_Constant.Size_Of_Address));  
        This_Object := Parametre_Defs.Identificator (Byte_String_Temp);
        Resultat := Resultat_Intermediaire_2 and Resultat_Intermediaire;
    end Init;


    function Request
                (Class : String;
                 Method : String;
                 In_Parametres : Queue_Parametre.Queue;
                 Object : Parametre_Defs.Identificator := Parametre_Defs.Orb)
                return Parametre_Defs.Message_Number is
        My_Method : Parametre.Variable_String;
        My_Class : Parametre.Variable_String;
        List_Containt : Liste_Parametre.List;
        Iter : Queue_Parametre.Iterator;
        Message_To_Orb : Message.Object;
    begin
        Task_Io.Put_Line ("demande d'une requete");
        Bounded_String.Copy (My_Class, Class);
        List_Containt := Liste_Parametre.Make (My_Class, List_Containt);
        Bounded_String.Copy (My_Method, Method);
        List_Containt := Liste_Parametre.Make (My_Method, List_Containt);
        Parametre_Defs.Increment (Number);
        if Queue_Parametre.Is_Empty (In_Parametres) = False then
            List_Containt := Queue_Parametre_Utils.Add_Queue_To_List
                                (List_Containt, In_Parametres);
        end if;
        Parametre_Defs.Increment (Number);
        Message.Create (Message_To_Orb, This_Object, Object,
                        Parametre_Defs.Reque, Number, List_Containt);
        Message.Send (Message_To_Orb, Liaison_To_Orb);
        return Number;

    end Request;


    procedure Unpublication (Method : String) is
        Message_To_Orb : Message.Object;
        Method_Name : Liste_Parametre.List;
    begin
        Task_Io.Put_Line ("retrait d'une methode aupres de l'orb");
        Parametre_Defs.Increment (Number);
        Method_Name := Liste_Parametre.Make (Class_Of_Object, Method_Name);
        Method_Name := Liste_Parametre.Make
                          (Parametre.Value (Method), Method_Name);
        Message.Create (Message_To_Orb, This_Object, Parametre_Defs.Orb,
                        Parametre_Defs.Unpub, Number, Method_Name);
        Message.Send (Message_To_Orb, Liaison_To_Orb);
    end Unpublication;


    procedure Publication (Method : String;
                           In_Parametres : Queue_Parametre.Queue;
                           Out_Parametres : Queue_Parametre.Queue) is

        Message_To_Orb : Message.Object;
        Method_Definition : Liste_Parametre.List;
        String_Method : Parametre.Variable_String;
        String_Method1 : Parametre.Variable_String;
        In_Parametre_Number : Natural := 0;
        Out_Parametre_Number : Natural := 0;
        Iter : Queue_Parametre.Iterator;
        Iterat : Liste_Parametre.Iterator;
    begin
        Task_Io.Put_Line ("publication d'une methode");
        Method_Definition := Liste_Parametre.Make
                                (Class_Of_Object, Method_Definition);
        Method_Definition := Liste_Parametre.Make
                                (Parametre.Value (Method), Method_Definition);
        Bounded_String.Copy
           (String_Method, Natural'Image
                              (Queue_Parametre_Utils.Length (In_Parametres)));  
        Method_Definition := Liste_Parametre.Make
                                (String_Method, Method_Definition);
        Method_Definition := Queue_Parametre_Utils.Add_Queue_To_List
                                (Method_Definition, In_Parametres);
        Bounded_String.Copy
           (String_Method, Natural'Image
                              (Queue_Parametre_Utils.Length (Out_Parametres)));
        Method_Definition := Liste_Parametre.Make
                                (String_Method, Method_Definition);
        Method_Definition := Queue_Parametre_Utils.Add_Queue_To_List
                                (Method_Definition, Out_Parametres);
        Parametre_Defs.Increment (Number);
        Message.Create (Message_To_Orb, This_Object, Parametre_Defs.Orb,
                        Parametre_Defs.Publi, Number, Method_Definition);  
        Message.Send (Message_To_Orb, Liaison_To_Orb);
        Liste_Parametre.Free (Method_Definition);
    end Publication;


    procedure Registration (Class : String) is

        Message_To_Orb, Message_From_Orb : Message.Object;
        Class_Definition : Liste_Parametre.List;
        String_Socket : Parametre.Variable_String;
        String_Host : Parametre.Variable_String;
        List_My_Identificator : Liste_Parametre.List;
        Iter : Liste_Parametre.Iterator;
        Reponse : Boolean;
        Resultat : Boolean;
    begin
        Task_Io.Put_Line ("enregistrement aupres de l'orb");
        Bounded_String.Copy (Class_Of_Object, Class);
        Class_Definition := Liste_Parametre.Make
                               (Parametre.Value (Class), Class_Definition);
        Parametre_Defs.Init (Number);
        Message.Create (Message_To_Orb, This_Object, Parametre_Defs.Orb,
                        Parametre_Defs.Regis, Number, Class_Definition);  
        Message.Send (Message_To_Orb, Liaison_To_Orb);  
        Liste_Parametre.Free (Class_Definition);
        loop
            Message.Receive (Message_From_Orb, Liaison_From_Orb, Resultat);
            Task_Io.Put_Line (".");
            exit when Resultat = True;
        end loop;
        if Parametre_Defs.Message_Type'Pos
              (Message.Get_Type (Message_From_Orb)) /=
           Parametre_Defs.Message_Type'Pos (Parametre_Defs.Regis) then
            Task_Io.Put_Line ("erreur de registration");
        else
            This_Object := Message.Get_Dest (Message_From_Orb);
        end if;
        Channel_Operator_To_Bal.Init (Liaison_From_Orb);  
    end Registration;


    procedure Unregistration is
        Message_To_Orb : Message.Object;
        Class_List : Liste_Parametre.List;
    begin
        Task_Io.Put_Line ("unregistration");
        Parametre_Defs.Increment (Number);
        Class_List := Liste_Parametre.Make (Class_Of_Object, Class_List);
        Message.Create (Message_To_Orb, This_Object, Parametre_Defs.Orb,
                        Parametre_Defs.Unreg, Number, Class_List);
        Message.Send (Message_To_Orb, Liaison_To_Orb);  
        Channel_Operator_To_Bal.Dispose;
    end Unregistration;


    procedure Close is
    begin
        Channel_Operator.Close (Liaison_From_Orb);
        My_Channel_User.Close (Liaison_To_Orb);
    end Close;
end Generic_Request_To_Orb;

E3 Meta Data

    nblk1=e
    nid=8
    hdr6=18
        [0x00] rec0=20 rec1=00 rec2=01 rec3=042
        [0x01] rec0=15 rec1=00 rec2=0e rec3=02a
        [0x02] rec0=02 rec1=00 rec2=0a rec3=07c
        [0x03] rec0=18 rec1=00 rec2=0b rec3=018
        [0x04] rec0=11 rec1=00 rec2=04 rec3=044
        [0x05] rec0=16 rec1=00 rec2=03 rec3=020
        [0x06] rec0=15 rec1=00 rec2=02 rec3=034
        [0x07] rec0=16 rec1=00 rec2=0c rec3=00e
        [0x08] rec0=12 rec1=00 rec2=06 rec3=08c
        [0x09] rec0=16 rec1=00 rec2=05 rec3=012
        [0x0a] rec0=14 rec1=00 rec2=07 rec3=010
        [0x0b] rec0=1b rec1=00 rec2=09 rec3=000
        [0x0c] rec0=1c rec1=00 rec2=09 rec3=02c
        [0x0d] rec0=01 rec1=00 rec2=0a rec3=000
    tail 0x21762660a87c44cafcf30 0x42a00088462060003
Free Block Chain:
  0x8: 0000  00 0d 03 fc 00 3f 20 20 20 20 62 65 67 69 6e 20  ┆     ?    begin ┆
  0xd: 0000  00 00 00 0c 00 09 20 20 20 20 20 20 20 20 20 09  ┆                ┆