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

⟦bd6120214⟧ Ada Source

    Length: 6144 (0x1800)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Behavior_Defs, seg_02c6af

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 Behavior_Exception;
with Identifier;
with Message;
with Method;
with Signature;
with Parameter;

package body Behavior_Defs is


    procedure Register_Service (Host : String;
                                Socket : Message_Transport.Socket) is
        Status : Message_Transport.Status_Code;

        use Message_Transport;
    begin
        Message_Transport.Put
           (Message => Standard.Message.Image
                          (Message.Create
                              (Class => Message.Registration,
                               Addressee => Identifier.Hash (Identifier.Broker),
                               Sender => Identifier.Hash (Identifier.Nil),
                               Method => "registration",
                               Parameter1_Name => "host",
                               Parameter1_Class => "string",
                               Parameter1_Value => Host,
                               Parameter2_Name => "socket",
                               Parameter2_Class => "string",
                               Parameter2_Value =>
                                  Message_Transport.Socket'Image (Socket))),

            Remote_Host => Identifier.Get_Host (Identifier.Broker),
            Remote_Socket => Identifier.Get_Socket (Identifier.Broker),
            Number_Of_Retry => 10,
            Retry_Delay => 0.1,
            Status => Status);

        if Status /= Message_Transport.Ok then
            raise Behavior_Exception.Not_Registered_Error;
        end if;
    end Register_Service;


    procedure Identify (M : String;
                        Behavior : out Identifier.Object;
                        Registered : out Boolean) is

        Mes : Message.Object;
        Met : Method.Object;
        Sig : Signature.Object;
        Par : Parameter.Object;  
        Iter : Signature.Iterator;
    begin
        Mes := Message.Value (M);

        if not Message."=" (Message.Get_Class (Mes), Message.Notification) then
            Behavior := Identifier.Nil;
            Registered := False;
        end if;


        Met := Message.Get_Method (Mes);

        if Method.Get_Name (Met) /= Behavior_Defs.Identification_Name then
            Behavior := Identifier.Nil;
            Registered := False;
        end if;


        Sig := Method.Get_Signature (Met);

        Signature.Init (Iter, Sig);

        if Signature.Is_Done (Iter) then
            Behavior := Identifier.Nil;
            Registered := False;
        end if;


        Par := Signature.Value (Iter);

        if Parameter.Get_Name (Par) /=
           Behavior_Defs.Identification_Parameter then
            Behavior := Identifier.Nil;
            Registered := False;
        end if;

        if Parameter.Get_Class (Par) /= Behavior_Defs.Identification_Class then
            Behavior := Identifier.Nil;
            Registered := False;
        end if;

        declare
        begin
            Behavior := Identifier.Value (Natural'Value
                                             (Parameter.Get_Value (Par)));
            Registered := True;
        exception
            when others =>
                Behavior := Identifier.Nil;
                Registered := False;
        end;

    end Identify;


    procedure Send_Message (Message : Standard.Message.Object;
                            Status : out Message_Transport.Status_Code) is
        Addressee : Identifier.Object :=
           Identifier.Value (Standard.Message.Get_Addressee (Message));

        use Standard.Message;
    begin

        if Standard.Message.Get_Class (Message) = Standard.Message.Forward then
            Message_Transport.Put
               (Message => Standard.Message.Image (Message),
                Remote_Host => Identifier.Get_Host (Identifier.Broker),
                Remote_Socket => Identifier.Get_Socket (Identifier.Broker),
                Number_Of_Retry => 10,
                Retry_Delay => 0.1,
                Status => Status);

        else
            Message_Transport.Put
               (Message => Standard.Message.Image (Message),
                Remote_Host => Identifier.Get_Host (Addressee),  
                Remote_Socket => Identifier.Get_Socket (Addressee),
                Number_Of_Retry => 10,
                Retry_Delay => 0.1,
                Status => Status);

        end if;

    end Send_Message;

end Behavior_Defs;

E3 Meta Data

    nblk1=5
    nid=0
    hdr6=a
        [0x00] rec0=1c rec1=00 rec2=01 rec3=068
        [0x01] rec0=1d rec1=00 rec2=04 rec3=026
        [0x02] rec0=22 rec1=00 rec2=05 rec3=040
        [0x03] rec0=1d rec1=00 rec2=02 rec3=066
        [0x04] rec0=13 rec1=00 rec2=03 rec3=000
    tail 0x21524cd0e840470f3d61d 0x42a00088462060003