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

⟦6117e11de⟧ Ada Source

    Length: 72704 (0x11c00)
    Types: Ada Source
    Notes: 03_class, FILE, Long Ada Source, R1k_Segment, e3_tag, package body Master_Orb, seg_056fd0

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 My_Set_Of_Adress, Set_Of_Fil_Observ;
with All_String, Set_Method;
with T_Message, T_Status;
with Constant_Start_End;  
with Com_Defs, The_Contrats;
with Conversion, Text_Manager;

package body Master_Orb is


    task body Object_Request_Broker is

        My_Contrat : The_Contrats.Set_Of_Objects.Set;
        My_Method_Array : Set_Method.Method_Array;

        My_Contrat_Iterator : The_Contrats.Contrat_Iterator;  
        My_Contrat_Array : The_Contrats.Contrat_Array;
        Local_Contrat : The_Contrats.Contrat;

        Set_Of_Client : My_Set_Of_Adress.Set_Of_Adress.Set;  
        Set_Of_Server : My_Set_Of_Adress.Set_Of_Adress.Set;

        Set_Of_Filter : Set_Of_Fil_Observ.My_Set_Of_Fil_Ob.Set;
        Set_Of_Observer : Set_Of_Fil_Observ.My_Set_Of_Fil_Ob.Set;

        My_Receive_Frame : The_Message.T_Frame;  
        My_Send_Frame : The_Message.T_Frame;  
        My_Status : Boolean := False;  
        Status : Boolean := False;
        Status1 : Boolean := False;
        My_Appli_Number : Com_Defs.Com_Number := 0;
        My_Quest_Number : Com_Defs.Com_Number := 0;
        Orb_Appli_Number : Com_Defs.Com_Number := 0;

        My_Data_To_Send : Com_Defs.V_String;
        My_Receive_Data : Com_Defs.V_String;
        My_Adress_String_And_Apply_Number, My_Adress_String_And_Apply_Number1,
        My_Adress_String_And_Apply_Number2, My_Adress_String_And_Apply_Number3 :
           All_String.Adress_String_And_Apply_Number;  
        Orb_Adress : constant All_String.Adress_String_And_Apply_Number :=
           "0000000000000000";
        My_Adress_String : All_String.Adress_String;  
        My_Internet_Adress, My_Host_Name, My_Source_Apply_Number, My_Specif :
           Com_Defs.V_String;

        My_Frame_Length : Natural;

        My_Integer_Type_Of_Message : Integer;
        My_Integer_Type_Of_Status : Integer;  
        My_Type_Of_Message : T_Message.T_Mess;
        My_Type_Of_Status : T_Status.T_State;

        My_Data_Iterator : The_Message.Data_Iterator;
        The_Class_Name, The_Object_Name, The_Method_Name,
        The_Parameters, The_Number_Of_Parameter : Com_Defs.V_String;


        procedure Error is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Error");
            The_Message.Init_Data (My_Data_Iterator, My_Receive_Frame);
            The_Message.Next_Data (My_Data_Iterator);
            My_Receive_Data := The_Message.Value_Data (My_Data_Iterator);
            Text_Manager.Text.Put_Line ("Orb : The error message is : " &
                                        Com_Defs.Image (My_Receive_Data));
        end Error;

        procedure Registration is
        begin  
            The_Message.Init_Data (My_Data_Iterator, My_Receive_Frame);
            The_Message.Next_Data (My_Data_Iterator);
            My_Host_Name := The_Message.Value_Data (My_Data_Iterator);
            My_Source_Apply_Number :=
               The_Message.Value (The_Message.Read_Source_Apply_Number
                                     (My_Receive_Frame));
            case My_Integer_Type_Of_Status is
                when T_Status.T_State'Pos (T_Status.Client_To_Orb) =>  
                    begin  
                        Text_Manager.Text.Put_Line
                           ("ORB : a client was registred");  
                        My_Set_Of_Adress.Add_To
                           (This_Set => Set_Of_Client,
                            This_Adress => My_Adress_String_And_Apply_Number,
                            This_Machine => My_Host_Name,
                            This_Appli_Number => My_Source_Apply_Number);
                        if My_Set_Of_Adress.Contains_This_Adress
                              (Set_Of_Client,
                               My_Adress_String_And_Apply_Number) then
                            Text_Manager.Text.Put_Line
                               ("ORB : add client is OK");
                        else
                            Text_Manager.Text.Put_Line
                               ("ORB : add client isn't OK");
                        end if;
                    end;
                when T_Status.T_State'Pos (T_Status.Server_To_Orb) =>  
                    begin  
                        Text_Manager.Text.Put_Line
                           ("ORB : a server was registred");  
                        My_Set_Of_Adress.Add_To
                           (This_Set => Set_Of_Server,
                            This_Adress => My_Adress_String_And_Apply_Number,
                            This_Machine => My_Host_Name,
                            This_Appli_Number => My_Source_Apply_Number);
                        if My_Set_Of_Adress.Contains_This_Adress
                              (Set_Of_Server,
                               My_Adress_String_And_Apply_Number) then
                            Text_Manager.Text.Put_Line
                               ("ORB : add server is OK");
                        else
                            Text_Manager.Text.Put_Line
                               ("ORB : add server isn't OK");
                        end if;
                    end;
                when T_Status.T_State'Pos (T_Status.Filter_To_Orb) =>  
                    begin
                        Text_Manager.Text.Put_Line
                           ("ORB : a filter was registred");  
                        Set_Of_Fil_Observ.Add_To
                           (This_Set => Set_Of_Filter,  
                            This_Adress => My_Adress_String_And_Apply_Number,
                            This_Machine => My_Host_Name,
                            This_Appli_Number => My_Source_Apply_Number);
                        if Set_Of_Fil_Observ.Contains_This_Adress
                              (Set_Of_Filter,
                               My_Adress_String_And_Apply_Number) then
                            Text_Manager.Text.Put_Line
                               ("ORB : add filter is OK");
                        else  
                            Text_Manager.Text.Put_Line
                               ("ORB : add filter isn't OK");
                        end if;
                    end;
                when T_Status.T_State'Pos (T_Status.Observer_To_Orb) =>  
                    begin  
                        Text_Manager.Text.Put_Line
                           ("ORB : an observer was registred");  
                        Set_Of_Fil_Observ.Add_To
                           (This_Set => Set_Of_Observer,  
                            This_Adress => My_Adress_String_And_Apply_Number,
                            This_Machine => My_Host_Name,
                            This_Appli_Number => My_Source_Apply_Number);  
                        if Set_Of_Fil_Observ.Contains_This_Adress
                              (Set_Of_Observer,
                               My_Adress_String_And_Apply_Number) then
                            Text_Manager.Text.Put_Line
                               ("ORB : add observer is OK");
                        else  
                            Text_Manager.Text.Put_Line
                               ("ORB : add observer isn't OK");
                        end if;
                    end;
                when others =>
                    Text_Manager.Text.Put_Line
                       ("ORB : Registration : type of status is unknown");
            end case;
        end Registration;


        procedure Unregistration is
        begin  
            case My_Integer_Type_Of_Status is
                when T_Status.T_State'Pos (T_Status.Client_To_Orb) =>  
                    begin
                        Text_Manager.Text.Put_Line
                           ("ORB : a client was unregistred");
                        My_Set_Of_Adress.Delete_To
                           (This_Set => Set_Of_Client,
                            This_Adress => My_Adress_String_And_Apply_Number);
                    end;
                when T_Status.T_State'Pos (T_Status.Server_To_Orb) =>  
                    begin  
                        Text_Manager.Text.Put_Line
                           ("ORB : a server was unregistred");
                        My_Set_Of_Adress.Delete_To
                           (This_Set => Set_Of_Server,
                            This_Adress => My_Adress_String_And_Apply_Number);
                    end;
                when T_Status.T_State'Pos (T_Status.Filter_To_Orb) =>  
                    begin  
                        Text_Manager.Text.Put_Line
                           ("ORB : a filter was unregistred");
                        Set_Of_Fil_Observ.Delete_To
                           (This_Set => Set_Of_Filter,
                            This_Adress => My_Adress_String_And_Apply_Number);
                    end;
                when T_Status.T_State'Pos (T_Status.Observer_To_Orb) =>  
                    begin  
                        Text_Manager.Text.Put_Line
                           ("ORB : an observer was unregistred");
                        Set_Of_Fil_Observ.Delete_To
                           (This_Set => Set_Of_Observer,
                            This_Adress => My_Adress_String_And_Apply_Number);
                    end;
                when others =>
                    Text_Manager.Text.Put_Line
                       ("ORB : Unregistration : type of status is unknown");
            end case;  
        end Unregistration;


        procedure Query is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Query");
-- No treatment
        end Query;


        procedure Request_Method is
        begin  
            Text_Manager.Text.Put_Line ("ORB : Entry_Request_Method");
            My_Adress_String_And_Apply_Number1 :=
               The_Message.Read_Source_Adress_Internet_And_Apply_Number
                  (My_Receive_Frame);
            The_Message.Init_Data (My_Data_Iterator, My_Receive_Frame);
            The_Message.Next_Data (My_Data_Iterator);
            The_Class_Name := The_Message.Value_Data (My_Data_Iterator);
            The_Message.Next_Data (My_Data_Iterator);
            The_Object_Name := The_Message.Value_Data (My_Data_Iterator);  
            Text_Manager.Text.Put_Line ("ORB : Class_Name requested is : " &
                                        Com_Defs.Image (The_Class_Name));
            Text_Manager.Text.Put_Line ("ORB : Object_Name requested is : " &
                                        Com_Defs.Image (The_Object_Name));
            The_Message.Copy (My_Send_Frame, My_Receive_Frame);
            The_Message.Exchange_Source_Destination (My_Send_Frame);
            The_Message.Init_Type_Of_Status
               (T_Status.Orb_To_Client, My_Send_Frame);  
            The_Message.Remove_Data (My_Send_Frame);  
            My_Set_Of_Adress.Extract_The_Machine
               (This_Set => Set_Of_Client,
                This_Adress => My_Adress_String_And_Apply_Number1,
                Answer_In => My_Host_Name);  
            My_Appli_Number := The_Message.Read_Apply_Number
                                  (My_Adress_String_And_Apply_Number1);
            if The_Contrats.Find_This_Object
                  (My_Contrat, The_Class_Name, The_Object_Name) then  
                Text_Manager.Text.Put_Line ("ORB : Methods has been found");
                The_Contrats.Extract_All_Methods
                   (My_Contrat, The_Class_Name,
                    The_Object_Name, My_Contrat_Array);
                The_Contrats.Init (My_Contrat_Iterator, My_Contrat_Array);
                The_Message.Init_Type_Of_Message
                   (T_Message.Response, My_Send_Frame);

                while (not The_Contrats.Done (My_Contrat_Iterator)) loop
                    Local_Contrat := The_Contrats.Value (My_Contrat_Iterator);
                    -- Text_Manager.Text.Put_Line
                    --    ("Local_Contrat.class_name : " &
                    --     Com_Defs.Image (Local_Contrat.Class_Name));
                    -- Text_Manager.Text.Put_Line
                    --    ("Local_Contrat.object_name : " &
                    --     Com_Defs.Image (Local_Contrat.Object_Name));
                    -- Text_Manager.Text.Put_Line
                    --    ("Local_Contrat.method_name : " &
                    --     Com_Defs.Image (Local_Contrat.Method_Name));
                    -- Text_Manager.Text.Put_Line
                    --    ("Local_Contrat.parameter : " &
                    --     Com_Defs.Image (Local_Contrat.Parameter));
                    -- Text_Manager.Text.Put_Line
                    --    ("Local_Contrat.number : " &
                    --     Com_Defs.Image (Local_Contrat.Number));
                    The_Message.Init_Data_Message
                       (Local_Contrat.Class_Name, My_Send_Frame);
                    The_Message.Init_Data_Message
                       (The_Message.Value ("/"), My_Send_Frame);
                    The_Message.Init_Data_Message
                       (Local_Contrat.Object_Name, My_Send_Frame);
                    The_Message.Init_Data_Message
                       (The_Message.Value ("/"), My_Send_Frame);
                    The_Message.Init_Data_Message
                       (Local_Contrat.Method_Name, My_Send_Frame);
                    The_Message.Init_Data_Message
                       (The_Message.Value ("/"), My_Send_Frame);
                    The_Message.Init_Data_Message
                       (Local_Contrat.Number, My_Send_Frame);
                    The_Message.Init_Data_Message
                       (The_Message.Value ("/"), My_Send_Frame);
                    The_Message.Init_Data_Message
                       (Local_Contrat.Parameter, My_Send_Frame);
                    The_Contrats.Next (My_Contrat_Iterator);  
                    Text_Manager.Text.Put_Line
                       ("ORB : the send frame is : " &
                        The_Message.Image (My_Send_Frame));
                    The_Message.Send (My_Appli_Number, My_Host_Name,  
                                      My_Send_Frame, My_Status);  
                end loop;
            else
                Text_Manager.Text.Put_Line ("ORB : Methods hasn't been found");
                The_Message.Remove_Data (My_Send_Frame);
                The_Message.Init_Type_Of_Message
                   (T_Message.Error, My_Send_Frame);  
                The_Message.Init_Data_Message
                   (Com_Defs.Value ("methods undisponible"), My_Send_Frame);  
                Text_Manager.Text.Put_Line ("ORB : the send frame is : " &
                                            The_Message.Image (My_Send_Frame));
                The_Message.Send (My_Appli_Number, My_Host_Name,  
                                  My_Send_Frame, My_Status);
            end if;  
        end Request_Method;


        procedure Request_Service is
        begin  
            Text_Manager.Text.Put_Line ("Orb : Entry_Request_Service");
            The_Message.Copy (My_Send_Frame, My_Receive_Frame);
            case My_Integer_Type_Of_Status is
                when T_Status.T_State'Pos (T_Status.Client_To_Orb) =>
                    begin  
                        Text_Manager.Text.Put_Line
                           ("ORB : request_service from a client");  
                        The_Message.Extract_The_Contract
                           (My_Frame => My_Receive_Frame,
                            My_Iter => My_Data_Iterator,
                            Class_Name => The_Class_Name,
                            Object_Name => The_Object_Name,
                            Method_Name => The_Method_Name,
                            Number_Of_Parameter => The_Number_Of_Parameter,
                            Parameters => The_Parameters);
                        The_Message.Remove_Data (My_Send_Frame);
                        if The_Contrats.Find_This_Object
                              (The_Contrat => My_Contrat,
                               With_This_Name_Class => The_Class_Name,
                               With_This_Object_Name => The_Object_Name,
                               With_This_Method_Name => The_Method_Name,
                               With_This_Parameter => The_Parameters,
                               With_This_Number => The_Number_Of_Parameter) then
                            The_Contrats.Extract_The_Adress
                               (My_Contrat,
                                From_This_Class => The_Class_Name,
                                With_This_Object_Name => The_Object_Name,
                                With_This_Method_Name => The_Method_Name,
                                With_This_Parameter => The_Parameters,  
                                With_This_Number => The_Number_Of_Parameter,
                                Response_In =>
                                   My_Adress_String_And_Apply_Number2);
-- ON RECHERCHE SI UN FILTRE EXISTE
                            Set_Of_Fil_Observ.Extract_The_Adress
                               (This_Set => Set_Of_Filter,
                                This_Specification => The_Object_Name,
                                Answer_In => My_Adress_String_And_Apply_Number3,
                                Is_Ok => Status1);
                            if Status1 then
                                Set_Of_Fil_Observ.Extract_The_Machine
                                   (This_Set => Set_Of_Filter,
                                    This_Adress =>
                                       My_Adress_String_And_Apply_Number3,
                                    Answer_In => My_Host_Name,
                                    Is_Ok => Status);
                                The_Message.Init_Type_Of_Status
                                   (T_Status.Orb_To_Filter_Before_Server,
                                    My_Send_Frame);
                                The_Message.Init_Source
                                   (My_Adress_String_And_Apply_Number2,
                                    My_Send_Frame);
                                The_Message.Init_Destinataire
                                   (My_Adress_String_And_Apply_Number3,
                                    My_Send_Frame);  
                                My_Appli_Number :=
                                   The_Message.Read_Apply_Number
                                      (My_Adress_String_And_Apply_Number3);
                                Set_Of_Fil_Observ.Extract_The_Machine
                                   (This_Set => Set_Of_Filter,
                                    This_Adress =>
                                       My_Adress_String_And_Apply_Number3,
                                    Answer_In => My_Host_Name,
                                    Is_Ok => Status);  
                            else
-- PAS DE FILTRE
                                Text_Manager.Text.Put_Line
                                   ("ORB : Request_Service : no filter found");
-- RECHERCHE UN OBSERVER
                                Set_Of_Fil_Observ.Contains_This_Specification
                                   (This_Set => Set_Of_Observer,
                                    This_Specification => The_Object_Name,
                                    The_Adress =>
                                       My_Adress_String_And_Apply_Number3,
                                    The_Status => Status);
                                if Status then
                                    The_Message.Init_Source
                                       (My_Adress_String_And_Apply_Number3,
                                        My_Send_Frame);
-- Il existe un OBSERVER
                                else
                                    The_Message.Init_Source
                                       (Orb_Adress, My_Send_Frame);
                                end if;

                                My_Appli_Number :=
                                   The_Message.Read_Apply_Number
                                      (My_Adress_String_And_Apply_Number2);
                                My_Set_Of_Adress.Extract_The_Machine
                                   (This_Set => Set_Of_Server,
                                    This_Adress =>
                                       My_Adress_String_And_Apply_Number2,
                                    Answer_In => My_Host_Name);  
                                The_Message.Init_Type_Of_Status
                                   (T_Status.Orb_To_Server, My_Send_Frame);  
                                The_Message.Init_Destinataire
                                   (My_Adress_String_And_Apply_Number2,
                                    My_Send_Frame);  
                                The_Message.Remove_Data (My_Send_Frame);
                            end if;  
                        else  
                            Text_Manager.Text.Put_Line
                               ("ORB : Contract hasn't been found");  
                            My_Adress_String_And_Apply_Number1 :=
                               The_Message.
                                  Read_Source_Adress_Internet_And_Apply_Number
                                  (My_Send_Frame);
                            The_Message.Exchange_Source_Destination
                               (My_Send_Frame);
                            My_Appli_Number :=
                               The_Message.Read_Apply_Number
                                  (My_Adress_String_And_Apply_Number1);  
                            My_Set_Of_Adress.Extract_The_Machine
                               (This_Set => Set_Of_Client,
                                This_Adress =>
                                   My_Adress_String_And_Apply_Number1,
                                Answer_In => My_Host_Name);  
                            The_Message.Init_Type_Of_Status
                               (T_Status.Orb_To_Client, My_Send_Frame);
                            The_Message.Init_Type_Of_Message
                               (T_Message.Error, My_Send_Frame);  
                            The_Message.Init_Data_Message
                               (Com_Defs.Value ("server undisponible"),
                                My_Send_Frame);  
                        end if;  
                        Text_Manager.Text.Put_Line
                           ("ORB : the send frame is : " &
                            The_Message.Image (My_Send_Frame));
                        The_Message.Send (My_Appli_Number, My_Host_Name,  
                                          My_Send_Frame, My_Status);  
                    end;

                when others =>
                    Text_Manager.Text.Put_Line
                       ("ORB : Request_Service : error dans case");
            end case;
        end Request_Service;


        procedure Notification is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Notification");  
            The_Message.Init_Data (My_Data_Iterator, My_Receive_Frame);
            The_Message.Next_Data (My_Data_Iterator);
            My_Receive_Data := The_Message.Value_Data (My_Data_Iterator);
-- TRAITEMENT A AJOUTER
        end Notification;


        procedure Forward is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Forward");
            The_Message.Init_Data (My_Data_Iterator, My_Receive_Frame);
            The_Message.Next_Data (My_Data_Iterator);
            The_Class_Name := The_Message.Value_Data (My_Data_Iterator);
-- TRAITEMENT A AJOUTER
        end Forward;


        procedure Publication is
        begin
            The_Message.Extract_The_Contract
               (My_Frame => My_Receive_Frame,
                My_Iter => My_Data_Iterator,
                Class_Name => The_Class_Name,
                Object_Name => The_Object_Name,
                Method_Name => The_Method_Name,
                Number_Of_Parameter => The_Number_Of_Parameter,
                Parameters => The_Parameters);  
            The_Contrats.Add_A_Contrat
               (My_Contrat,
                With_This_Class_Name => The_Class_Name,
                With_This_Object_Name => The_Object_Name,
                With_This_Method_Name => The_Method_Name,
                With_This_Parameter => The_Parameters,
                With_This_Number => The_Number_Of_Parameter,
                With_This_Adress => My_Adress_String_And_Apply_Number);  
            if The_Contrats.Find_This_Object
                  (My_Contrat,
                   With_This_Name_Class => The_Class_Name,
                   With_This_Object_Name => The_Object_Name,
                   With_This_Method_Name => The_Method_Name,
                   With_This_Parameter => The_Parameters,
                   With_This_Number => The_Number_Of_Parameter) then
                Text_Manager.Text.Put_Line ("ORB : publication add is OK");
            else
                Text_Manager.Text.Put_Line ("ORB : publication add isn't OK");
            end if;
        end Publication;


        procedure Unpublication is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Unpublication");  
            The_Message.Extract_The_Contract
               (My_Frame => My_Receive_Frame,
                My_Iter => My_Data_Iterator,
                Class_Name => The_Class_Name,
                Object_Name => The_Object_Name,
                Method_Name => The_Method_Name,
                Number_Of_Parameter => The_Number_Of_Parameter,
                Parameters => The_Parameters);
            The_Contrats.Delete_A_Contrat
               (My_Contrat,
                With_This_Class_Name => The_Class_Name,
                With_This_Object_Name => The_Object_Name,
                Which_Has_This_Adress => My_Adress_String_And_Apply_Number);
        end Unpublication;


        procedure Response is
            Tampon : The_Message.T_Frame;
        begin  
            Text_Manager.Text.Put_Line ("ORB : Entry_response");
            The_Message.Copy (My_Send_Frame, My_Receive_Frame);
            case My_Integer_Type_Of_Status is  
                when T_Status.T_State'Pos (T_Status.
                                           Filter_To_Orb_Before_Server) =>
                    begin
                        Text_Manager.Text.Put_Line
                           ("ORB : Response after the filter and before the server");
                        The_Message.Init_Type_Of_Status
                           (T_Status.Orb_To_Server, My_Send_Frame);
                        The_Message.Init_Type_Of_Message
                           (T_Message.Request_Service, My_Send_Frame);
                        My_Adress_String_And_Apply_Number1 :=
                           The_Message.
                              Read_Destinataire_Adress_Internet_And_Apply_Number
                              (My_Receive_Frame);
                        My_Set_Of_Adress.Extract_The_Machine
                           (This_Set => Set_Of_Server,
                            This_Adress => My_Adress_String_And_Apply_Number1,
                            Answer_In => My_Host_Name);
                        My_Appli_Number :=
                           The_Message.Read_Apply_Number
                              (My_Adress_String_And_Apply_Number1);  
                        Text_Manager.Text.Put_Line
                           ("ORB : the send frame is : " &
                            The_Message.Image (My_Send_Frame));
                        The_Message.Send (My_Appli_Number, My_Host_Name,  
                                          My_Send_Frame, My_Status);  
                    end;

                when T_Status.T_State'Pos (T_Status.Server_To_Orb) =>
                    begin
                        Text_Manager.Text.Put_Line
                           ("ORB : Response from a server");
                        My_Adress_String_And_Apply_Number3 :=
                           The_Message.
                              Read_Client_Adress_Internet_And_Apply_Number
                              (My_Receive_Frame);  
                        My_Adress_String_And_Apply_Number2 :=
                           The_Message.
                              Read_Destinataire_Adress_Internet_And_Apply_Number
                              (My_Receive_Frame);  
                        My_Adress_String_And_Apply_Number1 :=
                           The_Message.
                              Read_Source_Adress_Internet_And_Apply_Number
                              (My_Receive_Frame);
                        The_Message.Exchange_Source_Destination (My_Send_Frame);
                        if My_Adress_String_And_Apply_Number2 = Orb_Adress then
-- PAS DE FILTRE ni d'OBSERVER ASSOCIE
-- On envoie au client
                            The_Message.Init_Destinataire
                               (My_Adress_String_And_Apply_Number3,
                                My_Send_Frame);
                            The_Message.Init_Type_Of_Status
                               (T_Status.Orb_To_Client, My_Send_Frame);
                            The_Message.Init_Type_Of_Message
                               (T_Message.Response, My_Send_Frame);  
                            My_Set_Of_Adress.Extract_The_Machine
                               (This_Set => Set_Of_Client,
                                This_Adress =>
                                   My_Adress_String_And_Apply_Number3,
                                Answer_In => My_Host_Name);  
                            My_Appli_Number :=
                               The_Message.Read_Apply_Number
                                  (My_Adress_String_And_Apply_Number3);
                            Text_Manager.Text.Put_Line
                               ("ORB : the send frame is : " &
                                The_Message.Image (My_Send_Frame));
                            The_Message.Send (My_Appli_Number, My_Host_Name,  
                                              My_Send_Frame, My_Status);  
                        else  
                            if Set_Of_Fil_Observ.Contains_This_Adress
                                  (The_Set => Set_Of_Filter,
                                   This_Adress =>
                                      My_Adress_String_And_Apply_Number2) then
                                The_Message.Exchange_Source_Destination
                                   (My_Send_Frame);
                                The_Message.Init_Source
                                   (Orb_Adress, My_Send_Frame);
                                The_Message.Init_Type_Of_Status
                                   (T_Status.Orb_To_Filter_After_Server,
                                    My_Send_Frame);
                                The_Message.Init_Type_Of_Message
                                   (T_Message.Request_Service, My_Send_Frame);
                                Set_Of_Fil_Observ.Extract_The_Machine
                                   (This_Set => Set_Of_Filter,
                                    This_Adress =>
                                       My_Adress_String_And_Apply_Number2,
                                    Answer_In => My_Host_Name,
                                    Is_Ok => Status);
                                My_Appli_Number :=
                                   The_Message.Read_Apply_Number
                                      (My_Adress_String_And_Apply_Number2);  
                                Text_Manager.Text.Put_Line
                                   ("ORB : the send frame is : " &
                                    The_Message.Image (My_Send_Frame));
                                The_Message.Send (My_Appli_Number, My_Host_Name,  
                                                  My_Send_Frame, My_Status);
                            else
                                The_Message.Init_Source
                                   (Orb_Adress, My_Send_Frame);
                                The_Message.Init_Destinataire
                                   (My_Adress_String_And_Apply_Number2,
                                    My_Send_Frame);
                                The_Message.Init_Type_Of_Status
                                   (T_Status.Orb_To_Observer, My_Send_Frame);
                                The_Message.Init_Type_Of_Message
                                   (T_Message.Request_Service, My_Send_Frame);
                                Set_Of_Fil_Observ.Extract_The_Machine
                                   (This_Set => Set_Of_Observer,
                                    This_Adress =>
                                       My_Adress_String_And_Apply_Number2,
                                    Answer_In => My_Host_Name,
                                    Is_Ok => Status);
                                My_Appli_Number :=
                                   The_Message.Read_Apply_Number
                                      (My_Adress_String_And_Apply_Number2);  
                                The_Message.Copy (Tampon, My_Send_Frame);
                                Text_Manager.Text.Put_Line
                                   ("ORB : the send frame is : " &
                                    The_Message.Image (My_Send_Frame));
                                The_Message.Send (My_Appli_Number, My_Host_Name,  
                                                  My_Send_Frame, My_Status);

                                The_Message.Init_Type_Of_Status
                                   (T_Status.Orb_To_Client, Tampon);
                                The_Message.Init_Source (Orb_Adress, Tampon);
                                The_Message.Init_Destinataire
                                   (My_Adress_String_And_Apply_Number3, Tampon);
                                The_Message.Init_Type_Of_Message
                                   (T_Message.Response, Tampon);  
                                My_Set_Of_Adress.Extract_The_Machine
                                   (This_Set => Set_Of_Client,
                                    This_Adress =>
                                       My_Adress_String_And_Apply_Number3,
                                    Answer_In => My_Host_Name);  
                                My_Appli_Number :=
                                   The_Message.Read_Apply_Number
                                      (My_Adress_String_And_Apply_Number3);
                                Text_Manager.Text.Put_Line
                                   ("ORB : the send frame is : " &
                                    The_Message.Image (Tampon));
                                The_Message.Send (My_Appli_Number, My_Host_Name,  
                                                  Tampon, My_Status);  
                            end if;
                        end if;
                    end;

                when T_Status.T_State'Pos (T_Status.
                                           Filter_To_Orb_After_Server) =>
                    begin
                        Text_Manager.Text.Put_Line
                           ("ORB : Response after the server and after the filter");
                        My_Adress_String_And_Apply_Number1 :=
                           The_Message.
                              Read_Source_Adress_Internet_And_Apply_Number
                              (My_Receive_Frame);  
                        The_Message.Exchange_Source_Destination (My_Send_Frame);
                        Set_Of_Fil_Observ.Extract_The_Specification
                           (This_Set => Set_Of_Filter,
                            This_Adress => My_Adress_String_And_Apply_Number1,
                            Answer_In => My_Specif,
                            Is_Ok => Status);  
                        Set_Of_Fil_Observ.Contains_This_Specification
                           (This_Set => Set_Of_Observer,
                            This_Specification => My_Specif,
                            The_Adress => My_Adress_String_And_Apply_Number2,
                            The_Status => Status);
                        if Status then
-- Il existe un OBSERVER
                            The_Message.Init_Destinataire
                               (My_Adress_String_And_Apply_Number2,
                                My_Send_Frame);
                            The_Message.Init_Type_Of_Status
                               (T_Status.Orb_To_Observer, My_Send_Frame);
                            The_Message.Init_Type_Of_Message
                               (T_Message.Request_Service, My_Send_Frame);
                            Set_Of_Fil_Observ.Extract_The_Machine
                               (This_Set => Set_Of_Observer,
                                This_Adress =>
                                   My_Adress_String_And_Apply_Number2,
                                Answer_In => My_Host_Name,
                                Is_Ok => Status);
                            My_Appli_Number :=
                               The_Message.Read_Apply_Number
                                  (My_Adress_String_And_Apply_Number2);
                            Text_Manager.Text.Put_Line
                               ("ORB : the send frame is : " &
                                The_Message.Image (My_Send_Frame));
                            The_Message.Send (My_Appli_Number, My_Host_Name,  
                                              My_Send_Frame, My_Status);  
                        else
                            Text_Manager.Text.Put_Line
                               ("ORB : response : no observer");                       end if;  
                        My_Adress_String_And_Apply_Number1 :=
                           The_Message.
                              Read_Client_Adress_Internet_And_Apply_Number
                              (My_Send_Frame);
                        The_Message.Init_Destinataire
                           (My_Adress_String_And_Apply_Number1, My_Send_Frame);
                        The_Message.Init_Type_Of_Status
                           (T_Status.Orb_To_Client, My_Send_Frame);
                        The_Message.Init_Type_Of_Message
                           (T_Message.Response, My_Send_Frame);
                        My_Set_Of_Adress.Extract_The_Machine
                           (This_Set => Set_Of_Client,
                            This_Adress => My_Adress_String_And_Apply_Number1,
                            Answer_In => My_Host_Name);
                        My_Appli_Number :=
                           The_Message.Read_Apply_Number
                              (My_Adress_String_And_Apply_Number1);  
                        Text_Manager.Text.Put_Line
                           ("ORB : the send frame is : " &
                            The_Message.Image (My_Send_Frame));
                        The_Message.Send (My_Appli_Number, My_Host_Name,  
                                          My_Send_Frame, My_Status);  
                    end;

                when others =>
                    Text_Manager.Text.Put_Line ("ORB : Response : error case");
            end case;
        end Response;


        procedure Subscription is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Subscription");
            The_Message.Init_Data (My_Data_Iterator, My_Receive_Frame);
            My_Receive_Data := The_Message.Value_Data (My_Data_Iterator);  
            Text_Manager.Text.Put_Line ("ORB : " &
                                        "Observer specification is : " &
                                        Com_Defs.Image (My_Receive_Data));  
            Set_Of_Fil_Observ.Add_Specification
               (This_Set => Set_Of_Observer,
                This_Adress => My_Adress_String_And_Apply_Number,
                This_Specification => My_Receive_Data);
            Set_Of_Fil_Observ.Contains_This_Specification
               (This_Set => Set_Of_Observer,
                This_Specification => My_Receive_Data,
                The_Adress => My_Adress_String_And_Apply_Number1,
                The_Status => Status);  
            if Status then
                Text_Manager.Text.Put_Line ("ORB : Subscription add is OK");
            else
                Text_Manager.Text.Put_Line ("ORB : Subscription add isn't OK");
            end if;  
        end Subscription;


        procedure Unsubscription is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Unsubscription");  
            Set_Of_Fil_Observ.Delete_To
               (This_Set => Set_Of_Observer,  
                This_Adress => My_Adress_String_And_Apply_Number);
        end Unsubscription;


        procedure Filtration is
        begin
            Text_Manager.Text.Put_Line ("ORB : Entry_Filtration");  
            The_Message.Init_Data (My_Data_Iterator, My_Receive_Frame);
            My_Receive_Data := The_Message.Value_Data (My_Data_Iterator);
            Text_Manager.Text.Put_Line ("Orb : Filter specification is : " &
                                        Com_Defs.Image (My_Receive_Data));  
            Set_Of_Fil_Observ.Add_Specification
               (This_Set => Set_Of_Filter,  
                This_Adress => My_Adress_String_And_Apply_Number,
                This_Specification => My_Receive_Data);  
            Set_Of_Fil_Observ.Contains_This_Specification
               (This_Set => Set_Of_Filter,
                This_Specification => My_Receive_Data,
                The_Adress => My_Adress_String_And_Apply_Number1,
                The_Status => Status);  
            if Status then
                Text_Manager.Text.Put_Line ("ORB : Filtration add is OK");  
            else
                Text_Manager.Text.Put_Line ("ORB : Filtration add isn't OK");
            end if;
        end Filtration;


        procedure Unfiltration is
        begin
            Text_Manager.Text.Put_Line ("Orb : Entry_Unfiltration");
            Set_Of_Fil_Observ.Delete_To
               (This_Set => Set_Of_Filter,  
                This_Adress => My_Adress_String_And_Apply_Number);
        end Unfiltration;


    begin  
        The_Contrats.Create_Set (My_Contrat);
        My_Set_Of_Adress.Initialize (The_Set => Set_Of_Client);  
        My_Set_Of_Adress.Initialize (The_Set => Set_Of_Server);  
        Set_Of_Fil_Observ.Initialize (The_Set => Set_Of_Filter);
        Set_Of_Fil_Observ.Initialize (The_Set => Set_Of_Observer);

        The_Message.Init_T_Frame (My_Send_Frame);
        Text_Manager.Text.Put_Line ("ORB : End of the init");
        delay (10.0);

        --*********************************************************
        loop  
            loop  
                Text_Manager.Text.Put_Line ("ORB : is trying to receive");
                The_Message.Receive (Orb_Appli_Number,
                                     My_Receive_Frame, My_Status);
                delay (30.0);
                exit when My_Status = True;
            end loop;  
            Text_Manager.Text.Put_Line ("ORB : has received" &
                                        The_Message.Image (My_Receive_Frame));

            My_Integer_Type_Of_Message :=
               The_Message.Read_Type_Of_Message (My_Receive_Frame);  
            My_Integer_Type_Of_Status :=
               The_Message.Read_Type_Of_Status (My_Receive_Frame);
            My_Adress_String_And_Apply_Number :=
               The_Message.Read_Source_Adress_Internet_And_Apply_Number
                  (My_Receive_Frame);

            My_Adress_String :=
               The_Message.Read_Source_Adress (My_Receive_Frame);

            case My_Integer_Type_Of_Message is

                when T_Message.T_Mess'Pos (T_Message.Error) =>
                    begin
                        Error;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Registration) =>
                    begin
                        Registration;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Unregistration) =>
                    begin
                        Unregistration;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Query) =>
                    begin
                        Query;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Request_Method) =>
                    begin
                        Request_Method;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Request_Service) =>
                    begin
                        Request_Service;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Notification) =>
                    begin
                        Notification;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Forward) =>
                    begin
                        Forward;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Publication) =>
                    begin
                        Publication;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Unpublication) =>
                    begin
                        Unpublication;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Response) =>
                    begin
                        Response;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Subscription) =>
                    begin
                        Subscription;  
                    end;

                when T_Message.T_Mess'Pos (T_Message.Unsubscription) =>
                    begin
                        Unsubscription;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Filtration) =>
                    begin
                        Filtration;
                    end;

                when T_Message.T_Mess'Pos (T_Message.Unfiltration) =>
                    begin
                        Unfiltration;                   end;

                when others =>
                    Text_Manager.Text.Put_Line ("Orb : " &
                                                "type of message is unknown");

            end case;

            -- The_Contrats.Print (My_Contrat);
            -- Text_Manager.Text.Put_Line ("Orb : description  set of filter");
            -- Set_Of_Fil_Observ.Print (Set_Of_Filter);
            -- Text_Manager.Text.Put_Line ("Orb : description  set of observer");
            -- Set_Of_Fil_Observ.Print (Set_Of_Observer);
            -- Text_Manager.Text.Put_Line ("Orb : description  set of client");
            -- My_Set_Of_Adress.Print (Set_Of_Client);
            -- Text_Manager.Text.Put_Line ("Orb : description  set of server");
            -- My_Set_Of_Adress.Print (Set_Of_Server);

        end loop;
    end Object_Request_Broker;

end Master_Orb;

E3 Meta Data

    nblk1=46
    nid=40
    hdr6=6a
        [0x00] rec0=1f rec1=00 rec2=01 rec3=00a
        [0x01] rec0=15 rec1=00 rec2=3e rec3=044
        [0x02] rec0=17 rec1=00 rec2=34 rec3=008
        [0x03] rec0=10 rec1=00 rec2=3d rec3=064
        [0x04] rec0=13 rec1=00 rec2=0c rec3=006
        [0x05] rec0=12 rec1=00 rec2=10 rec3=016
        [0x06] rec0=12 rec1=00 rec2=25 rec3=028
        [0x07] rec0=17 rec1=00 rec2=32 rec3=042
        [0x08] rec0=13 rec1=00 rec2=0f rec3=008
        [0x09] rec0=1a rec1=00 rec2=0d rec3=01a
        [0x0a] rec0=0f rec1=00 rec2=12 rec3=02c
        [0x0b] rec0=12 rec1=00 rec2=24 rec3=014
        [0x0c] rec0=10 rec1=00 rec2=2a rec3=02c
        [0x0d] rec0=11 rec1=00 rec2=15 rec3=042
        [0x0e] rec0=11 rec1=00 rec2=1d rec3=030
        [0x0f] rec0=15 rec1=00 rec2=44 rec3=01e
        [0x10] rec0=0e rec1=00 rec2=29 rec3=092
        [0x11] rec0=10 rec1=00 rec2=45 rec3=008
        [0x12] rec0=0f rec1=00 rec2=20 rec3=06c
        [0x13] rec0=12 rec1=00 rec2=02 rec3=008
        [0x14] rec0=11 rec1=00 rec2=04 rec3=058
        [0x15] rec0=11 rec1=00 rec2=1e rec3=03a
        [0x16] rec0=10 rec1=00 rec2=17 rec3=068
        [0x17] rec0=1a rec1=00 rec2=3f rec3=040
        [0x18] rec0=06 rec1=00 rec2=21 rec3=034
        [0x19] rec0=14 rec1=00 rec2=14 rec3=074
        [0x1a] rec0=16 rec1=00 rec2=30 rec3=058
        [0x1b] rec0=15 rec1=00 rec2=2c rec3=086
        [0x1c] rec0=01 rec1=00 rec2=39 rec3=058
        [0x1d] rec0=10 rec1=00 rec2=1b rec3=092
        [0x1e] rec0=05 rec1=00 rec2=0e rec3=006
        [0x1f] rec0=10 rec1=00 rec2=2e rec3=09c
        [0x20] rec0=11 rec1=00 rec2=1a rec3=08c
        [0x21] rec0=10 rec1=00 rec2=06 rec3=058
        [0x22] rec0=0f rec1=00 rec2=35 rec3=084
        [0x23] rec0=10 rec1=00 rec2=3b rec3=010
        [0x24] rec0=0e rec1=00 rec2=27 rec3=086
        [0x25] rec0=0f rec1=00 rec2=42 rec3=06e
        [0x26] rec0=12 rec1=00 rec2=22 rec3=070
        [0x27] rec0=02 rec1=00 rec2=03 rec3=07c
        [0x28] rec0=11 rec1=00 rec2=2d rec3=052
        [0x29] rec0=11 rec1=00 rec2=41 rec3=002
        [0x2a] rec0=10 rec1=00 rec2=0b rec3=06e
        [0x2b] rec0=16 rec1=00 rec2=3c rec3=012
        [0x2c] rec0=08 rec1=00 rec2=43 rec3=038
        [0x2d] rec0=18 rec1=00 rec2=08 rec3=08e
        [0x2e] rec0=17 rec1=00 rec2=07 rec3=00c
        [0x2f] rec0=18 rec1=00 rec2=2f rec3=008
        [0x30] rec0=18 rec1=00 rec2=28 rec3=04a
        [0x31] rec0=05 rec1=00 rec2=11 rec3=034
        [0x32] rec0=1e rec1=00 rec2=3a rec3=048
        [0x33] rec0=1f rec1=00 rec2=36 rec3=002
        [0x34] rec0=16 rec1=00 rec2=18 rec3=000
        [0x35] rec0=16 rec1=00 rec2=18 rec3=000
        [0x36] rec0=0e rec1=00 rec2=03 rec3=07c
        [0x37] rec0=0e rec1=00 rec2=43 rec3=052
        [0x38] rec0=0d rec1=00 rec2=08 rec3=086
        [0x39] rec0=0e rec1=00 rec2=44 rec3=056
        [0x3a] rec0=0b rec1=00 rec2=2f rec3=01e
        [0x3b] rec0=10 rec1=00 rec2=2d rec3=006
        [0x3c] rec0=0e rec1=00 rec2=25 rec3=018
        [0x3d] rec0=0f rec1=00 rec2=33 rec3=004
        [0x3e] rec0=0e rec1=00 rec2=26 rec3=044
        [0x3f] rec0=14 rec1=00 rec2=1f rec3=07e
        [0x40] rec0=10 rec1=00 rec2=06 rec3=034
        [0x41] rec0=16 rec1=00 rec2=35 rec3=016
        [0x42] rec0=11 rec1=00 rec2=18 rec3=024
        [0x43] rec0=10 rec1=00 rec2=1a rec3=02a
        [0x44] rec0=13 rec1=00 rec2=1b rec3=046
        [0x45] rec0=0e rec1=00 rec2=39 rec3=000
    tail 0x21763a0c487c59193abac 0x42a00088462060003
Free Block Chain:
  0x40: 0000  00 33 00 05 80 02 67 65 02 72 76 2e 45 78 74 72  ┆ 3    ge rv.Extr┆
  0x33: 0000  00 26 00 04 80 01 20 01 54 65 78 74 5f 4d 61 6e  ┆ &      Text_Man┆
  0x26: 0000  00 1f 03 fc 00 3f 20 20 20 20 20 20 20 20 20 20  ┆     ?          ┆
  0x1f: 0000  00 38 03 f9 80 1b 20 20 20 20 20 20 20 20 20 20  ┆ 8              ┆
  0x38: 0000  00 09 03 fc 80 16 5f 4f 72 62 5f 42 65 66 6f 72  ┆      _Orb_Befor┆
  0x9: 0000  00 1c 03 fc 80 12 69 74 68 5f 54 68 69 73 5f 4e  ┆      ith_This_N┆
  0x1c: 0000  00 13 03 fc 80 23 20 20 20 20 20 20 20 20 20 20  ┆     #          ┆
  0x13: 0000  00 16 03 fc 80 09 53 74 61 74 65 27 50 6f 73 09  ┆      State'Pos ┆
  0x16: 0000  00 31 03 fc 80 19 68 65 5f 43 6f 6e 74 72 61 74  ┆ 1    he_Contrat┆
  0x31: 0000  00 2b 03 fc 80 01 2c 01 00 44 20 20 20 20 20 20  ┆ +    ,  D      ┆
  0x2b: 0000  00 23 00 b9 80 28 62 20 3a 20 72 65 71 75 65 73  ┆ #   (b : reques┆
  0x23: 0000  00 37 03 fc 80 13 49 6e 69 74 5f 54 79 70 65 5f  ┆ 7    Init_Type_┆
  0x37: 0000  00 05 03 fc 80 31 20 20 20 20 20 20 20 20 20 20  ┆     1          ┆
  0x5: 0000  00 19 00 0b 80 08 20 20 20 20 20 20 20 20 08 75  ┆               u┆
  0x19: 0000  00 0a 01 00 80 18 78 74 5f 4d 61 6e 61 67 65 72  ┆      xt_Manager┆
  0xa: 0000  00 46 03 fc 80 2e 20 20 20 20 20 20 20 20 20 20  ┆ F   .          ┆
  0x46: 0000  00 00 03 fc 80 30 20 20 20 20 20 20 20 20 20 20  ┆     0          ┆