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

⟦240963bc3⟧ Ada Source

    Length: 8192 (0x2000)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Trans, seg_057449

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 Text_Io;
with Byte_Defs;
with Message;
with Bal;  
with Identification;
with Transport;
with Transport_Defs;
with Orb_Tools;  
with Utils;

package body Trans is

    Name_Of_Network : constant Transport_Defs.Network_Name := "TCP/IP";

    Orb_Host : constant Transport_Defs.Host_Id :=
       Transport.Local_Host (Name_Of_Network);

    Orb_Socket : constant Transport_Defs.Socket_Id := (10, 42);

    task Reception;

    task Emission;

    task body Reception is

        The_Mess : Message.Tmessage;
        The_Receive : Orb_Tools.Data_String;
        From_Object : Byte_Defs.Byte_String (0 .. 255);

        Connec_Recep : Transport.Connection_Id;  
        Status_Recep : Transport_Defs.Status_Code;

        Cpt : Natural;  
        Try : Natural := 2;

    begin
        loop
            Transport.Open (Connec_Recep, Status_Recep,
                            Name_Of_Network, Orb_Socket);
            if Transport.Is_Open (Connec_Recep) then
                Text_Io.Put_Line ("Receiver : connexion is open...");
            else
                Text_Io.Put_Line ("Receiver : can't open connexion...");
                Try := Try - 1;
            end if;  
            exit when (Try = 0 or Transport.Is_Open (Connec_Recep));
        end loop;

        if Try = 0 and not Transport.Is_Open (Connec_Recep) then
            Text_Io.Put_Line ("Receiver : failed in opening connexion");
        end if;

        loop
            Text_Io.Put_Line ("Receiver : waiting for a connexion ...");

            while not Transport.Is_Connected (Connec_Recep) loop

                Transport.Connect (Connec_Recep, Status_Recep);

            end loop;

            Text_Io.Put_Line ("Receiver : Someone is connected");

            loop

                Transport.Receive (Connec_Recep, Status_Recep,
                                   From_Object, Cpt);
                exit when Transport_Defs.Image (Status_Recep) = "OK";

            end loop;

            Text_Io.Put ("Receiver : Received data : ");

            Orb_Tools.Copy (Target => The_Receive,
                            Source => (From_Object (0 .. Cpt - 1)));

            Message.Unfill (Data => The_Receive, Mess => The_Mess);

            Text_Io.Put_Line (Orb_Tools.Image (The_Receive));

            Bal.Put_Rm (The_Mess);

            Transport.Disconnect (Connec_Recep);

        end loop;

    end Reception;

    task body Emission is

        From_Orb : Bal.Tmess_To_Send;
        The_Mess : Orb_Tools.Data_String;

        Connec_Emet : Transport.Connection_Id;  
        Status_Emet : Transport_Defs.Status_Code;

        Obj_Sock : Transport_Defs.Socket_Id (1 .. 2);
        Obj_Host : Transport_Defs.Host_Id (1 .. 4);

        Cpt : Natural;  
        Try : Natural := 2;

        The_Command, Error : Message.Command_Type;

    begin
        loop
            Transport.Open (Connec_Emet, Status_Emet, Name_Of_Network);
            if Transport.Is_Open (Connec_Emet) then
                Text_Io.Put_Line ("Transmiter : connexion is open...");
            else
                Text_Io.Put_Line ("Transmiter : can't open connexion...");
                Try := Try - 1;
            end if;  
            exit when (Try = 0 or Transport.Is_Open (Connec_Emet));
        end loop;

        if Try = 0 and not Transport.Is_Open (Connec_Emet) then
            Text_Io.Put_Line ("Transmiter :  failed in opening connexion");
        end if;

        loop  
            Text_Io.Put_Line ("Transmiter : is waiting for a message from Orb");

            while Bal.Is_Empty_Mts loop
                null;
            end loop;

            Bal.Get_Mts (From_Orb);

            Message.Fill (The_Mess, From_Orb.Mess);

            Text_Io.Put_Line
               ("Transmiter : try to contact the object located at (" &
                Orb_Tools.Image (From_Orb.Des.Sock) &
                ") with " & Orb_Tools.Image (The_Mess));

            Obj_Host := Orb_Tools.Vstring_To_Host (From_Orb.Des.Host);
            Obj_Sock := Orb_Tools.Vstring_To_Socket (From_Orb.Des.Sock);
            Try := 6;

            while not Transport.Is_Connected (Connec_Emet) and Try /= 0 loop

                delay 10.0;  
                Try := Try - 1;
                Text_Io.Put_Line ("Transmiter : tries left=" &
                                  Integer'Image (Try));
                Transport.Connect (Connec_Emet, Status_Emet,
                                   Obj_Host, Obj_Sock);
            end loop;

            if Try /= 0 or Transport.Is_Connected (Connec_Emet) then

                Text_Io.Put_Line ("Transmiter : object is connected...");

                Transport.Transmit
                   (Connec_Emet, Status_Emet,
                    Orb_Tools.Vstring_To_Byte_String (The_Mess), Cpt);

                Text_Io.Put_Line ("Transmiter : data transmited.");

                Transport.Disconnect (Connec_Emet);
            else
                Text_Io.Put_Line ("Transmiter : object is not responding");  
                Message.Unfill_Command (From_Orb.Mess, The_Command);
                if Message.Command_Type'Image (The_Command) =
                   Message.Command_Type'Image (Message.Request) then
                    Error := Message.Rfailed;
                else
                    Error := Message.Ifailed;
                end if;

                Message.Fill_Command (From_Orb.Mess, Error);
                Message.Fill_Origin (From_Orb.Mess, From_Orb.Id);
                Bal.Put_Rm (From_Orb.Mess);  
            end if;
        end loop;

    end Emission;

end Trans;

E3 Meta Data

    nblk1=7
    nid=0
    hdr6=e
        [0x00] rec0=29 rec1=00 rec2=01 rec3=03e
        [0x01] rec0=1c rec1=00 rec2=02 rec3=04c
        [0x02] rec0=27 rec1=00 rec2=06 rec3=006
        [0x03] rec0=00 rec1=00 rec2=07 rec3=06e
        [0x04] rec0=1c rec1=00 rec2=04 rec3=00c
        [0x05] rec0=18 rec1=00 rec2=05 rec3=06a
        [0x06] rec0=16 rec1=00 rec2=03 rec3=001
    tail 0x2154e009887c775191e80 0x42a00088462060003