|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7168 (0x1c00)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, procedure Request, seg_04b703, separate Broker_Work
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦5a81ac88f⟧ »Space Info Vol 1«
└─⟦this⟧
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;
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 0x215488f6286826c565566 0x42a00088462060003
Free Block Chain:
0x5: 0000 00 00 00 1a 80 0f 68 20 28 46 72 6f 6d 20 3d 3e ┆ h (From =>┆