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

⟦16caa77cd⟧ Ada Source

    Length: 21504 (0x5400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, seg_057427, separate Service_Manager

Derivation

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

E3 Source Code



separate (Service_Manager)
task body Manager_Task is

begin  
    Text_Io.Put_Line ("Demmarrage de la tache Service Manager.");
    loop
        select

            accept Add_Service (Service_Name : in Orb_Defs.Name;
                                Service_Connection : in Orb_Defs.Connection_Id;
                                Service_Ip : in Orb_Defs.Host_Id;
                                Service_Socket : in Orb_Defs.Socket_Id;
                                Service_Declaration : in Orb_Defs.Message;
                                Add : out Boolean) do  
                declare
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;  
                    Error_1, Error_2 : Boolean := True;
                begin  
                    Agent_Toolbox.Add_Agent
                       (Agent_Name => Service_Name,
                        Agent_Number => Agent_Number,
                        Agent_Connection => Service_Connection,
                        Agent_Ip => Service_Ip,
                        Agent_Socket => Service_Socket,
                        Error => Error_1);  
                    Error_2 := Service_Table.Subscribe_Service
                                  (The_Subscribe_Data => Service_Declaration,
                                   Agent_Reference => Agent_Number);
                    Add := not Error_1 and Error_2;
                end;
            end Add_Service;
        or
            accept Remove_Service (Service_Ip_Adress : in Orb_Defs.Host_Id;
                                   Service_Socket : in Orb_Defs.Socket_Id;
                                   Destruct : out Boolean) do  
                declare  
                    Agent_Connection : Orb_Defs.Connection_Id;
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;
                    Error_1, Error_2 : Boolean := True;
                begin  
                    Agent_Toolbox.Find_Agent
                       (Agent_Connection => Agent_Connection,
                        Agent_Ip => Service_Ip_Adress,
                        Agent_Socket => Service_Socket,
                        Agent_Number => Agent_Number,
                        Error => Error_1);  
                    if not Error_1 then
                        Agent_Toolbox.Remove_Agent
                           (Agent_Ip => Service_Ip_Adress,
                            Agent_Socket => Service_Socket,
                            Error => Error_2);

                        if not Error_1 and not Error_2 then
                            Error_2 := Service_Table.Remove_Service
                                          (Agent_Reference => Agent_Number);
                        else
                            Error_2 := False;
                        end if;
                    end if;

                    Destruct := not Error_1 and Error_2;
                end;  
            end Remove_Service;
        or
            accept Ask_Service (Ask_Class : in Orb_Defs.Class;
                                Ask_Fct : in Orb_Defs.Funct;
                                Service_Connection : out Orb_Defs.Connection_Id;
                                Service_Ip : out Orb_Defs.Host_Id;
                                Service_Socket : out Orb_Defs.Socket_Id;
                                Service_Release : out Boolean) do  
                declare
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;  
                    Error_1, Error_2 : Boolean;
                begin
                    Service_Table.Ask_Service (Service_Class => Ask_Class,
                                               Service_Fct => Ask_Fct,
                                               Agent_Reference => Agent_Number,
                                               Error => Error_1);
                    if not Error_1 then  
                        Service_Connection := Agent_Toolbox.Get_Connection
                                                 (Agent_Number => Agent_Number);
                        Service_Ip := Agent_Toolbox.Get_Ip
                                         (Agent_Number => Agent_Number);
                        Service_Socket :=
                           Agent_Toolbox.Get_Socket (Agent_Number);
                        Service_Release := not Error_1;
                    else  
                        Service_Connection := Transport.Null_Connection_Id;
                        Service_Ip := Orb_Defs.Null_Host_Id;
                        Service_Socket := Orb_Defs.Null_Socket_Id;  
                        Service_Release := not Error_1;
                    end if;
                end;  
            end Ask_Service;
        or
            accept Exist_Service (Ask_Class : in Orb_Defs.Class;
                                  Ask_Fct : in Orb_Defs.Funct;
                                  Service_Connection : out
                                     Orb_Defs.Connection_Id;
                                  Service_Ip : in Orb_Defs.Host_Id;
                                  Service_Socket : in Orb_Defs.Socket_Id;
                                  Service_Release : out Boolean) do
                declare
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;  
                    Error : Boolean;
                begin
                    Agent_Toolbox.Find_Agent
                       (Agent_Connection => Service_Connection,
                        Agent_Ip => Service_Ip,
                        Agent_Socket => Service_Socket,
                        Agent_Number => Agent_Number,
                        Error => Error);
                    Service_Release := not Error;
                end;  
            end Exist_Service;
        or
            accept Add_Filter (Filter_Name : in Orb_Defs.Name;
                               Filter_Connection : in Orb_Defs.Connection_Id;
                               Filter_Ip_Adress : in Orb_Defs.Host_Id;  
                               Filter_Socket : in Orb_Defs.Socket_Id;
                               Filter_Declaration : in Orb_Defs.Message;
                               Add : out Boolean) do
                declare
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;  
                    Error_1, Error_2 : Boolean := True;
                begin
                    Agent_Toolbox.Add_Agent
                       (Agent_Name => Filter_Name,
                        Agent_Number => Agent_Number,
                        Agent_Connection => Filter_Connection,
                        Agent_Ip => Filter_Ip_Adress,
                        Agent_Socket => Filter_Socket,
                        Error => Error_1);
                    Error_2 := Filter_Table.Subscribe_Service
                                  (The_Subscribe_Data => Filter_Declaration,
                                   Agent_Reference => Agent_Number);
                    Add := not Error_1 and Error_2;
                end;  
            end Add_Filter;
        or
            accept Remove_Filter (Agent_Ip_Adress : in Orb_Defs.Host_Id;
                                  Agent_Socket : in Orb_Defs.Socket_Id;
                                  Destruct : out Boolean) do
                declare  
                    Agent_Connection : Orb_Defs.Connection_Id;
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;
                    Error_1, Error_2 : Boolean := True;
                begin  
                    Agent_Toolbox.Find_Agent
                       (Agent_Connection => Agent_Connection,
                        Agent_Ip => Agent_Ip_Adress,
                        Agent_Socket => Agent_Socket,
                        Agent_Number => Agent_Number,
                        Error => Error_1);
                    if not Error_1 then
                        Agent_Toolbox.Remove_Agent
                           (Agent_Ip => Agent_Ip_Adress,
                            Agent_Socket => Agent_Socket,
                            Error => Error_2);
                        if not Error_1 and not Error_2 then
                            Error_2 := Filter_Table.Remove_Service
                                          (Agent_Reference => Agent_Number);
                        else
                            Error_2 := False;
                        end if;
                    end if;
                    Destruct := not Error_1 and Error_2;
                end;
            end Remove_Filter;
        or
            accept Ask_Filter (Ask_Class : in Orb_Defs.Class;
                               Ask_Function : in Orb_Defs.Funct;
                               Filter_Connection : out Orb_Defs.Connection_Id;
                               Filter_Ip_Adress : out Orb_Defs.Host_Id;
                               Filter_Socket : out Orb_Defs.Socket_Id;
                               Filter_Delivered : out Boolean) do
                declare
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;  
                    Error_1, Error_2 : Boolean;
                begin
                    Filter_Table.Ask_Service (Service_Class => Ask_Class,
                                              Service_Fct => Ask_Function,
                                              Agent_Reference => Agent_Number,
                                              Error => Error_1);  
                    Filter_Connection := Agent_Toolbox.Get_Connection
                                            (Agent_Number => Agent_Number);
                    Filter_Ip_Adress := Agent_Toolbox.Get_Ip
                                           (Agent_Number => Agent_Number);
                    Filter_Socket := Agent_Toolbox.Get_Socket (Agent_Number);
                    Filter_Delivered := not Error_1;
                end;
            end Ask_Filter;
        or
            accept Add_Spy (Spy_Name : in Orb_Defs.Name;  
                            Spy_Connection : in Orb_Defs.Connection_Id;
                            Spy_Ip_Adress : in Orb_Defs.Host_Id;
                            Spy_Socket : in Orb_Defs.Socket_Id;
                            Spy_Declaration : in Orb_Defs.Message;
                            Add : out Boolean) do
                declare
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;  
                    Error_1, Error_2 : Boolean := True;
                begin
                    Agent_Toolbox.Add_Agent (Agent_Name => Spy_Name,
                                             Agent_Number => Agent_Number,
                                             Agent_Connection => Spy_Connection,
                                             Agent_Ip => Spy_Ip_Adress,
                                             Agent_Socket => Spy_Socket,
                                             Error => Error_1);
                    Error_2 := Spy_Table.Subscribe_Service
                                  (The_Subscribe_Data => Spy_Declaration,
                                   Agent_Reference => Agent_Number);
                    Add := not Error_1 and Error_2;
                end;
            end Add_Spy;
        or
            accept Remove_Spy (Spy_Ip_Adress : in Orb_Defs.Host_Id;
                               Spy_Socket : in Orb_Defs.Socket_Id;
                               Destruct : out Boolean) do
                declare  
                    Agent_Connection : Orb_Defs.Connection_Id;
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;
                    Error_1, Error_2 : Boolean := True;
                begin  
                    Agent_Toolbox.Find_Agent
                       (Agent_Connection => Agent_Connection,
                        Agent_Ip => Spy_Ip_Adress,
                        Agent_Socket => Spy_Socket,
                        Agent_Number => Agent_Number,
                        Error => Error_1);
                    if not Error_1 then
                        Agent_Toolbox.Remove_Agent (Agent_Ip => Spy_Ip_Adress,
                                                    Agent_Socket => Spy_Socket,
                                                    Error => Error_2);

                        if not Error_1 and not Error_2 then
                            Error_2 := Spy_Table.Remove_Service
                                          (Agent_Reference => Agent_Number);
                        else
                            Error_2 := False;
                        end if;
                    end if;
                    Destruct := not Error_1 and Error_2;
                end;
            end Remove_Spy;
        or
            accept Ask_Spy (Ask_Class : in Orb_Defs.Class;
                            Ask_Function : in Orb_Defs.Funct;
                            Spy_Connection : out Orb_Defs.Connection_Id;
                            Spy_Ip_Adress : out Orb_Defs.Host_Id;
                            Spy_Socket : out Orb_Defs.Socket_Id;  
                            Spy_Release : out Boolean) do
                declare
                    Agent_Number : Service_Manager_Defs.Number_Of_Agent;  
                    Error_1, Error_2 : Boolean;
                begin
                    Spy_Table.Ask_Service (Service_Class => Ask_Class,
                                           Service_Fct => Ask_Function,
                                           Agent_Reference => Agent_Number,
                                           Error => Error_1);  
                    Spy_Connection := Agent_Toolbox.Get_Connection
                                         (Agent_Number => Agent_Number);
                    Spy_Ip_Adress := Agent_Toolbox.Get_Ip
                                        (Agent_Number => Agent_Number);
                    Spy_Socket := Agent_Toolbox.Get_Socket (Agent_Number);
                    Spy_Release := not Error_1;
                end;
            end Ask_Spy;
        or
            accept Ask_Agent_To_Test
                      (Agent_Connection : out Orb_Defs.Connection_Id;
                       Agent_Ip_Adress : out Orb_Defs.Host_Id;
                       Agent_Socket : out Orb_Defs.Socket_Id;
                       Error : out Boolean) do  
                declare  
                    Agent_Name : Orb_Defs.Name;
                begin
                    Agent_Toolbox.Next_Agent_To_Test
                       (Agent_Name => Agent_Name,
                        Agent_Connection => Agent_Connection,
                        Agent_Ip => Agent_Ip_Adress,
                        Agent_Socket => Agent_Socket,
                        Error => Error);  
                end;  
                Text_Io.Put_Line
                   ("Un agent a tester a ete fourni au control manager.");
            end Ask_Agent_To_Test;
        or
            accept Set_Agent_To_Failure
                      (Agent_Ip : in Orb_Defs.Host_Id;
                       Agent_Socket : in Orb_Defs.Socket_Id) do
                Agent_Toolbox.To_Failure (Agent_Ip => Agent_Ip,
                                          Agent_Socket => Agent_Socket);
            end Set_Agent_To_Failure;
        or
            accept Set_Agent_To_Ok (Agent_Ip : in Orb_Defs.Host_Id;
                                    Agent_Socket : in Orb_Defs.Socket_Id) do
                Agent_Toolbox.To_Ok (Agent_Ip => Agent_Ip,
                                     Agent_Socket => Agent_Socket);
            end Set_Agent_To_Ok;
        or  
            delay 5.0;
            Text_Io.Put_Line ("The Task Service Manager is ALIVE.");
        end select;
    end loop;
end Manager_Task;


E3 Meta Data

    nblk1=14
    nid=5
    hdr6=22
        [0x00] rec0=18 rec1=00 rec2=01 rec3=014
        [0x01] rec0=13 rec1=00 rec2=07 rec3=01e
        [0x02] rec0=16 rec1=00 rec2=12 rec3=00a
        [0x03] rec0=10 rec1=00 rec2=0e rec3=07e
        [0x04] rec0=13 rec1=00 rec2=14 rec3=02a
        [0x05] rec0=14 rec1=00 rec2=09 rec3=00a
        [0x06] rec0=11 rec1=00 rec2=11 rec3=04e
        [0x07] rec0=0a rec1=00 rec2=0c rec3=038
        [0x08] rec0=13 rec1=00 rec2=10 rec3=016
        [0x09] rec0=12 rec1=00 rec2=03 rec3=09c
        [0x0a] rec0=12 rec1=00 rec2=08 rec3=054
        [0x0b] rec0=11 rec1=00 rec2=0f rec3=076
        [0x0c] rec0=13 rec1=00 rec2=0a rec3=042
        [0x0d] rec0=14 rec1=00 rec2=0d rec3=07e
        [0x0e] rec0=13 rec1=00 rec2=13 rec3=004
        [0x0f] rec0=15 rec1=00 rec2=0b rec3=004
        [0x10] rec0=0b rec1=00 rec2=04 rec3=000
        [0x11] rec0=15 rec1=00 rec2=0b rec3=004
        [0x12] rec0=0b rec1=00 rec2=04 rec3=000
        [0x13] rec0=00 rec1=00 rec2=00 rec3=000
    tail 0x2154dff1087c770039c0d 0x42a00088462060003
Free Block Chain:
  0x5: 0000  00 02 03 fc 80 16 73 20 3a 20 69 6e 20 4f 72 62  ┆      s : in Orb┆
  0x2: 0000  00 06 00 04 80 01 20 01 20 20 20 65 6e 64 3b 20  ┆           end; ┆
  0x6: 0000  00 00 03 fc 80 17 63 6b 65 74 20 3d 3e 20 53 65  ┆      cket => Se┆