|
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 - download
Length: 10240 (0x2800) Types: Ada Source Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Daemon, seg_02ca01
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000 └─ ⟦5a81ac88f⟧ »Space Info Vol 1« └─⟦this⟧
with Agent; with Behavior_Defs; with Calendar; with Identifier; with Message; with Message_Transport; with Method; with Parameter; with Signature; with Time_Utilities; with Text_Io; use Text_Io; package body Daemon is Count : Integer := 0; Log_Server : Identifier.Object; procedure Publish (Self : Identifier.Object) is Status : Message_Transport.Status_Code; begin Behavior_Defs.Send_Message (Message => Message.Create (Class => Message.Publication, Addressee => Identifier.Hash (Id => Identifier.Broker), Sender => Identifier.Hash (Id => Self), Method => "count", Parameter_Name => "count", Parameter_Class => "string", Parameter_Value => Parameter.Void), Status => Status); end Publish; procedure Process_Message (Message : Standard.Message.Object; Handled : out Boolean); package A is new Agent (Publish, Process_Message); procedure Actor is Status : Message_Transport.Status_Code; Mes : Message.Object; Met : Method.Object; Sig : Signature.Object; Iter : Signature.Iterator; Par : Parameter.Object; Expired : Boolean; use Calendar; use Message_Transport; Interval : constant Duration := 10.0; Next_Time : Time := Clock + Interval; begin Behavior_Defs.Send_Message (Message => Message.Create (Class => Message.Request, Addressee => Identifier.Hash (Identifier.Broker), Sender => Identifier.Hash (Id => A.Get_Identity), Method => "log_server", Parameter1_Name => "display", Parameter1_Class => "string", Parameter1_Value => "grenouille:0", Parameter2_Name => "identifier", Parameter2_Class => "string", Parameter2_Value => Parameter.Void), Status => Status); Put_Line ("actor: request for log_server sent, we wait for reply"); A.Wait_For_Reply (Message => Mes, Time_Out => 5.0, Expired => Expired); if Expired then Put_Line ("actor: time out expired, there is no log server"); else Put_Line ("actor: received reply => " & Message.Image (Mes)); end if; Met := Message.Get_Method (Mes); if Method.Get_Name (Met) = "LOG_SERVER" then Put_Line ("actor: found a log server"); Signature.Init (Iter, Method.Get_Signature (Met)); Signature.Next (Iter); Par := Signature.Value (Iter); Put_Line ("actor: id => " & Parameter.Get_Value (Par)); Log_Server := Identifier.Value (Integer'Value (Parameter.Get_Value (Par))); end if; loop Put_Line ("actor: we delay"); delay Next_Time - Clock; Put_Line ("actor: delay is over"); Behavior_Defs.Send_Message (Message => Message.Create (Class => Message.Request, Addressee => Identifier.Hash (Id => Identifier.Broker), Sender => Identifier.Hash (Id => A.Get_Identity), Method => "date", Parameter_Name => "date", Parameter_Class => "string", Parameter_Value => Parameter.Void), Status => Status); Put_Line ("actor: request sent, we wait for reply"); A.Wait_For_Reply (Message => Mes, Time_Out => 5.0, Expired => Expired); Put_Line ("actor: we do no more wait"); if not Expired then Put_Line ("actor: received reply => " & Message.Image (Mes)); Behavior_Defs.Send_Message (Message => Message.Create (Class => Message.Forward, Addressee => Identifier.Hash (Id => Log_Server), Sender => Identifier.Hash (Id => A.Get_Identity), Method => "log_line", Parameter_Name => "message", Parameter_Class => "string", Parameter_Value => "hello world"), --Parameter2_Value => Parameter.Void), Status => Status); if Status = Ok then Put_Line ("+++ forwarded message to Log_Server"); else Put_Line ("*** failed forwarding message to Log_Server"); end if; else Put_Line ("actor: time_out has expired"); end if; Next_Time := Next_Time + Interval; end loop; end Actor; package Core is new A.Core (Actor); procedure Process_Message (Message : Standard.Message.Object; Handled : out Boolean) is Status : Message_Transport.Status_Code; use Message_Transport; begin if Method.Get_Name (Standard.Message.Get_Method (Message)) = "count" then New_Line; Put_Line ("+++ satisfying request for count"); Behavior_Defs.Send_Message (Message => Standard.Message.Create (Class => Standard.Message.Forward, Addressee => Standard.Message.Get_Sender (Message), Sender => Identifier.Hash (A.Get_Identity), Method => "count", Parameter_Name => "count", Parameter_Class => "string", Parameter_Value => Integer'Image (Count)), Status => Status); if Status = Ok then Put_Line ("--- asking broker to forward"); else Put_Line ("*** failed asking broker to forward"); end if; Handled := True; else Handled := False; end if; end Process_Message; procedure Start is begin Put_Line ("+++ Starting Daemon "); Core.Start; end Start; end Daemon;
nblk1=9 nid=0 hdr6=12 [0x00] rec0=24 rec1=00 rec2=01 rec3=010 [0x01] rec0=21 rec1=00 rec2=09 rec3=05c [0x02] rec0=01 rec1=00 rec2=03 rec3=038 [0x03] rec0=1a rec1=00 rec2=08 rec3=03c [0x04] rec0=18 rec1=00 rec2=04 rec3=072 [0x05] rec0=17 rec1=00 rec2=02 rec3=06c [0x06] rec0=14 rec1=00 rec2=05 rec3=00a [0x07] rec0=17 rec1=00 rec2=06 rec3=058 [0x08] rec0=18 rec1=00 rec2=07 rec3=000 tail 0x2152508aa84077ac95596 0x42a00088462060003