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

⟦b914ddfa5⟧ Ada Source

    Length: 7168 (0x1c00)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Request, seg_0525d6, separate Broker_Work

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



with Message_Transport;
with Transport;
with Max;

separate (Broker_Work)

procedure Request (M : Message_New.Object;
                   S : Message_Transport.Stream_Id;
                   Save : in out Memory.File) is
    Iter1 : Database.Iterator := Database.Publishers
                                    (Message_New.Get_Method (M));
    Iter2 : Database.Iterator := Database.Subscribers
                                    (Message_New.Get_Method (M));
    Stat : Message_Transport.Status_Code;  
    Given_Response : Message_Transport.Unlimited_String.Variable_String;
    Msg : Message_New.Object := M;  
    Descriptor_Subscriber, Descriptor_Server : Identifier.Descriptor;

    use Message_Transport;
begin  
    Log ("");
    Log ("+++ RECEIVED REQUEST FOR " &
         Method.Image (Message_New.Get_Method (M)));
    Text_Io.Put_Line ("+++ RECEIVED REQUEST FOR " &
                      Method.Image (Message_New.Get_Method (M)));
    Count := Count + 1;

    Memory.Add (Save, Count, Identifier.Search (From => S));
    Message_New.Set_Request (Msg, Count);

    Publishers:
        while not Database.Is_Done (Iter1) loop

            Log ("+++ FOUND POTENTIAL SERVER =>" &
                 Integer'Image (Database.Value (Iter1)));
            Log ("--- FORWARDING REQUEST");


            Descriptor_Server :=
               Identifier.Search
                  ((Identifier.Get_Host  
                       (Identifier.Value (Database.Value (Iter1)))),
                   Identifier.Get_Socket
                      (Identifier.Value (Database.Value (Iter1))));

            Message_Transport.Put
               (Stream => Identifier.Get_Stream (Descriptor_Server),
                Message => Standard.Message_New.Image (Msg),
                Response => Given_Response,
                Status => Stat);

            if Stat = Message_Transport.Ok then
                Log ("+++ FORWARD SUCCESSFUl");
                exit; --[WE FORWARDED SUCCESSFULY AND CONTINUE]
            else
                Put_Line ("++* FORWARD FAILED FOR PUBLISHER =>" &
                          Integer'Image (Database.Value (Iter1)));

                Put_Line ("--- MAKING IT STALE");
                Stale (Behavior => Database.Value (Iter1));

                Put_Line ("--- TRYING NEXT PUBLISHER");
            end if;

            Database.Next (Iter1);

            if Database.Is_Done (Iter1) then
                Put_Line ("*** FORWARD FAILED FOR ALL PUBLISHERS");
                Put_Line ("--- METHOD => " & Method.Image
                                                (Message_New.Get_Method (M)));
                Put_Line ("--- COULD NOT BE HANDLED");
            end if;

        end loop Publishers;


    Subscribers:
        while not Database.Is_Done (Iter2) loop


            Descriptor_Subscriber :=
               Identifier.Search
                  (Identifier.Get_Host
                      (Identifier.Value (Database.Value (Iter2))),
                   Identifier.Get_Socket
                      (Identifier.Value (Database.Value (Iter2))));


            Message_Transport.Put
               (Stream => Identifier.Get_Stream (Descriptor_Server),
                Message => Standard.Message_New.Image (Msg),
                Status => Stat);


            if Stat = Message_Transport.Ok then
                Log ("+++ PROPAGATED NOTIFICATION TO SUBSCRIBER => " &
                     Integer'Image (Database.Value (Iter2)));
            else
                Put_Line
                   ("*** FAILED TO PROPAGATE NOTIFICATION TO SUBSCRIBER => " &
                    Integer'Image (Database.Value (Iter2)));
                Put_Line ("--- MAKING IT STALE");
                Stale (Behavior => Database.Value (Iter2));
            end if;

            Database.Next (Iter2);
        end loop Subscribers;
end Request;


E3 Meta Data

    nblk1=6
    nid=5
    hdr6=a
        [0x00] rec0=1b rec1=00 rec2=01 rec3=02c
        [0x01] rec0=03 rec1=00 rec2=06 rec3=00a
        [0x02] rec0=1a rec1=00 rec2=02 rec3=01e
        [0x03] rec0=1d rec1=00 rec2=04 rec3=084
        [0x04] rec0=1a rec1=00 rec2=03 rec3=000
        [0x05] rec0=06 rec1=00 rec2=05 rec3=001
    tail 0x2154bafbe87a073346735 0x42a00088462060003
Free Block Chain:
  0x5: 0000  00 00 00 1a 80 0f 68 20 28 46 72 6f 6d 20 3d 3e  ┆      h (From =>┆