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

⟦a01b12389⟧ Ada Source

    Length: 9216 (0x2400)
    Types: Ada Source
    Notes: 03_class, FILE, R1k_Segment, e3_tag, package body Behavior_Tasks, seg_024249

Derivation

└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
    └─ ⟦cfc2e13cd⟧ »Space Info Vol 2« 
        └─⟦this⟧ 

E3 Source Code



with Text_Io;

with Socket_Defs;

with Interface_C;
use Interface_C;

with Umps_Parser;

with My_Utilities;

with Fifo_Received_Msg;
with Fifo_Msg_To_Send;



package body Behavior_Tasks is
    task body Behavior_Server_Task is

        Listen_Socket_Id  : Socket_Defs.Socket_Id := -1;
        Service_Socket_Id : Socket_Defs.Socket_Id;

        The_Task_Performing_Fifo_Received_Msg :
           Fifo_Received_Msg.Access_Task_Fifo;

        The_Msg                       : Socket_Defs.Msg;
        Buffer_To_Receive             : Socket_Defs.Msg;
        Length_Of_Buffer_To_Receive   : Integer := Socket_Defs.Msg_Length;
        Number_Of_Caracteres_Received : Integer;

        Result : Boolean := False;

    begin

        accept Start (Listen_Socket_Port : Socket_Defs.Socket_Port;
                      Task_Performing_Fifo_Received_Msg :
                         Fifo_Received_Msg.Access_Task_Fifo) do

            Listen_Socket_Id := Create_Server (Listen_Socket_Port);
            The_Task_Performing_Fifo_Received_Msg :=
               Task_Performing_Fifo_Received_Msg;
        end Start;

        loop

            -- Text_Io.Put_Line ("wait...");
            Service_Socket_Id :=
               Server_Wait_For_A_Connection (Listen_Socket_Id);
            -- Text_Io.Put_Line ("...connection !");
            --
            --
            Receive_String (Service_Socket_Id, Buffer_To_Receive,
                            Length_Of_Buffer_To_Receive,
                            Number_Of_Caracteres_Received);
            -- Text_Io.Put_Line ("Get !");


            -- Control if the received message is a PROTOCOL MESSAGE :

            if Buffer_To_Receive (1 .. 9) = "PROTOCOL " then

                if Buffer_To_Receive (10 .. 25) = "GIVE_ME_A_NUMBER" then

                    declare

                        The_Response              : Socket_Defs.Msg;
                        The_Allocated_Number      : Integer;
                        Number_Of_Caracteres_Sent : Integer;

                    begin

                        Text_Io.Put_Line ("Broker received :GIVE_ME_A_NUMBER");

                        -- TO CHANGE : It should be a call to the task Number Allocator.
                        The_Allocated_Number := 9997;

                        The_Response := Integer'Image (The_Allocated_Number);

                        Send_String (Service_Socket_Id, The_Response,
                                     Socket_Defs.Msg_Length,
                                     Number_Of_Caracteres_Sent);
                        Close_Socket (Service_Socket_Id);
                    end;
                else
                    Text_Io.Put_Line ("Broker received : ????");
                end if;
            else

                Close_Socket (Service_Socket_Id);
                -- Text_Io.Put_Line ("close !");
                --
                --


                My_Utilities.Normalize (Buffer_To_Receive, The_Msg);

                -- Send the received message to the task witch perform the received message :

                The_Task_Performing_Fifo_Received_Msg.Put (The_Msg, Result);
                if Result = False then
                    raise Socket_Defs.Put_Into_Fifo_Error;
                end if;
                -- Text_Io.Put_Line ("Put into fifo !");
                --
                --
            end if;
        end loop;

    end Behavior_Server_Task;


    task body Behavior_Client_Task is

        The_Msg : Socket_Defs.Msg;
        Result : Boolean := False;
        Service_Socket_Id : Socket_Defs.Socket_Id;
        Number_Of_Caracteres_Sent : Integer;
        The_Task_Performing_Fifo_Msg_To_Send :
           Fifo_Msg_To_Send.Access_Task_Fifo;
        The_Remote_Server_Listen_Socket_Port : Socket_Defs.Socket_Port;
        The_Remote_Server_Host_Name : Socket_Defs.Host_Name;
    begin

        accept Start (Task_Performing_Fifo_Msg_To_Send :
                         Fifo_Msg_To_Send.Access_Task_Fifo) do


            The_Task_Performing_Fifo_Msg_To_Send :=
               Task_Performing_Fifo_Msg_To_Send;


        end Start;

        loop
            select      -- Active wait ....

                The_Task_Performing_Fifo_Msg_To_Send.Get (The_Msg, Result);
                if Result = False then
                    raise Socket_Defs.Get_From_Fifo_Error;
                end if;

                declare
                    The_Remote_Server_Listen_Socket_Port :
                       Socket_Defs.Socket_Port;
                    The_Remote_Server_Host_Name : Socket_Defs.Host_Name;
                begin

                    -- Extract

                    Service_Socket_Id :=
                       Join_Server (The_Remote_Server_Host_Name,
                                    The_Remote_Server_Listen_Socket_Port);
                    if Service_Socket_Id < 0 then
                        raise Socket_Defs.Join_Server_Error;
                    end if;  
                    Send_String (Service_Socket_Id, The_Msg,
                                 Socket_Defs.Msg_Length,
                                 Number_Of_Caracteres_Sent);
                    Close_Socket (Service_Socket_Id);

                end;
            else
                null;
            end select;
        end loop;

    end Behavior_Client_Task;


end Behavior_Tasks;


E3 Meta Data

    nblk1=8
    nid=0
    hdr6=10
        [0x00] rec0=28 rec1=00 rec2=01 rec3=036
        [0x01] rec0=00 rec1=00 rec2=08 rec3=04a
        [0x02] rec0=1c rec1=00 rec2=06 rec3=078
        [0x03] rec0=01 rec1=00 rec2=07 rec3=01e
        [0x04] rec0=1b rec1=00 rec2=05 rec3=04e
        [0x05] rec0=1d rec1=00 rec2=04 rec3=034
        [0x06] rec0=1d rec1=00 rec2=03 rec3=056
        [0x07] rec0=13 rec1=00 rec2=02 rec3=001
    tail 0x2171f62ae839c4a9ee2a7 0x42a00088462063203