|
|
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: 22528 (0x5800)
Types: Ada Source
Notes: 03_class, FILE, R1k_Segment, e3_tag, package body The_Orb_Package, seg_0555c7
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦this⟧
with Transport_Defs;
with Text_Io;
with Communication;
with The_List_Generic;
with Byte_Defs;
package body The_Orb_Package is
type Type_Object is
record
The_Host : Transport_Defs.Host_Id (1 .. 4);
The_Socket : Transport_Defs.Socket_Id (1 .. 4);
end record;
type Type_Contract is
record
The_Host : Transport_Defs.Host_Id (1 .. 4);
The_Socket : Transport_Defs.Socket_Id (1 .. 4);
The_Number : Natural;
The_Name : Variable_String;
end record;
type Type_Spy is
record
The_Host : Transport_Defs.Host_Id (1 .. 4);
The_Socket : Transport_Defs.Socket_Id (1 .. 4);
The_Number : Natural;
end record;
package The_Pack_Of_Spy is new The_List_Generic (Type_Element => Type_Spy);
The_List_Of_Spy : The_Pack_Of_Spy.The_List;
package The_Pack_Of_Object is new The_List_Generic
(Type_Element => Type_Object);
The_List_Of_Object : The_Pack_Of_Object.The_List;
The_Spy_Number : Natural := 1; --a enlever apres le test
-- *********************************************
function Orb_Publication (The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id;
The_Name : Variable_String) return Boolean is
The_Object : Type_Object := (The_Host, The_Socket);
The_Iter : The_Pack_Of_Object.The_Iterator;
Is_Found : Boolean := False;
begin
-- Recherche de l'objet en liste
-- =============================
Is_Found := The_Pack_Of_Object.Search (The_List_Of_Object, The_Object);
if Is_Found then
return False; -- l'objet existe deja dans la liste
else -- insere L'objet
The_List_Of_Object := The_Pack_Of_Object.Make
(The_Object, The_List_Of_Object);
return True;
end if;
end Orb_Publication;
-- *********************************************
function Orb_Unpublication (The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id;
The_Name : Variable_String) return Boolean is
The_Element : Type_Object := (The_Host, The_Socket);
Is_Ok : Boolean := False;
begin
The_Pack_Of_Object.Delete (The_List_Of_Object, The_Element, Is_Ok);
return Is_Ok;
end Orb_Unpublication;
-- *********************************************
function Orb_Registration
(The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id) return Boolean is
The_Object : Type_Object := (The_Host, The_Socket);
The_Iter : The_Pack_Of_Object.The_Iterator;
Is_Found : Boolean := False;
begin
-- Recherche de l'objet en liste
-- =============================
Is_Found := The_Pack_Of_Object.Search (The_List_Of_Object, The_Object);
if Is_Found then
return False; -- l'objet existe deja dans la liste
else -- insere L'objet
The_List_Of_Object := The_Pack_Of_Object.Make
(The_Object, The_List_Of_Object);
return True;
end if;
end Orb_Registration;
-- *********************************************
function Orb_Unregistration
(The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id) return Boolean is
The_Element : Type_Object := (The_Host, The_Socket);
Is_Ok : Boolean := False;
begin
The_Pack_Of_Object.Delete (The_List_Of_Object, The_Element, Is_Ok);
return Is_Ok;
end Orb_Unregistration;
-- *********************************************
procedure Orb_Query is
begin
[statement]
end Orb_Query;
-- *********************************************
procedure Orb_Request (The_Message : Message.Type_Of_Message;
The_Connection_Data : in out
Our_Constantes.Connection_Data) is
The_New_Message : Message.Type_Of_Message;
begin
The_New_Message.The_Command := Our_Constantes.The_Request;
The_New_Message.The_Host_Machine_Send :=
The_Message.The_Host_Machine_Send;
The_New_Message.The_Host_Machine_Receive :=
The_Message.The_Host_Machine_To_Execute;
The_New_Message.Data := The_Message.Data;
The_New_Message.The_Socket_Send := The_Message.The_Socket_Send;
The_New_Message.The_Socket_Receive := The_Message.The_Socket_To_Execute;
Communication.Connection_Transmitter
(The_New_Message, The_Connection_Data);
Communication.Transmitter (The_New_Message, The_Connection_Data);
Communication.Disconnection (The_Connection_Data);
Text_Io.Put_Line (" envoi a la tache tierce Ok");
end Orb_Request;
-- *********************************************
procedure Orb_Notification (The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id;
The_Data : Our_String.Variable_String;
The_Connection_Data : in out
Our_Constantes.Connection_Data) is
The_New_Message : Message.Type_Of_Message;
Iter : The_Pack_Of_Object.The_Iterator;
A_Object : Type_Object;
Boy_Host : Transport_Defs.Host_Id (1 .. 4) := The_Host;
Boy_Socket : Transport_Defs.Socket_Id (1 .. 4) := The_Socket;
begin
The_New_Message.The_Command := Our_Constantes.The_Notification;
The_New_Message.The_Host_Machine_Send := The_Host;
The_New_Message.The_Socket_Send := The_Socket;
The_New_Message.Data := The_Data;
--on envoie un message a toutes les autres taches
if not The_Pack_Of_Object.Is_Empty (The_List_Of_Object) then
The_Pack_Of_Object.Init (Iter, The_List_Of_Object);
loop
A_Object := The_Pack_Of_Object.Value (Iter);
The_New_Message.The_Socket_Receive := A_Object.The_Socket;
The_New_Message.The_Host_Machine_Receive := A_Object.The_Host;
-- on teste l'identite du destinataire
-- pour qu'il ne recoive pas son propre message
-- if not ((Byte_Defs.Byte_String (Boy_Host)=
-- Byte_Defs.Byte_String (A_Object.The_Host)) and
-- (Socket_Id'Image (Boy_Socket) =
-- Socket_Id'Image (A_Object.The_Socket))) then
Communication.Connection_Transmitter
(The_New_Message, The_Connection_Data);
Communication.Transmitter
(The_New_Message, The_Connection_Data);
Communication.Disconnection (The_Connection_Data);
Text_Io.Put_Line (" Un Message d'info generale a ete envoye ");
-- end if;
The_Pack_Of_Object.Next (Iter);
if The_Pack_Of_Object.Done (Iter) then
exit;
end if;
end loop;
end if;
end Orb_Notification;
-- *********************************************
procedure Orb_Forward (The_Message : Message.Type_Of_Message;
The_Connection_Data : in out
Our_Constantes.Connection_Data) is
The_New_Message : Message.Type_Of_Message;
begin
The_New_Message.The_Command := Our_Constantes.The_Forward;
The_New_Message.The_Host_Machine_Send :=
The_Message.The_Host_Machine_Send;
The_New_Message.The_Host_Machine_Receive :=
The_Message.The_Host_Machine_To_Execute;
The_New_Message.Data := The_Message.Data;
The_New_Message.The_Socket_Send := The_Message.The_Socket_Send;
The_New_Message.The_Socket_Receive := The_Message.The_Socket_To_Execute;
Communication.Connection_Transmitter
(The_New_Message, The_Connection_Data);
Communication.Transmitter (The_New_Message, The_Connection_Data);
Communication.Disconnection (The_Connection_Data);
Text_Io.Put_Line (" envoi a la tache tierce Ok");
end Orb_Forward;
-- *********************************************
function Orb_Subscription (The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id;
The_Number : Natural) return Boolean is
The_Spy : Type_Spy := (The_Host, The_Socket, The_Number);
The_Iter : The_Pack_Of_Spy.The_Iterator;
Is_Found : Boolean := False;
begin
-- Recherche de l'objet en liste
-- =============================
Is_Found := The_Pack_Of_Spy.Search (The_List_Of_Spy, The_Spy);
if Is_Found then
return False; -- l'espion existe deja dans la liste
else -- insere L'espion
The_List_Of_Spy := The_Pack_Of_Spy.Make
(The_Spy, The_List_Of_Spy);
return True;
end if;
end Orb_Subscription;
-- *********************************************
function Orb_Unsubscription (The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id;
The_Number : Natural) return Boolean is
The_Element : Type_Spy := (The_Host, The_Socket, The_Number);
Is_Ok : Boolean := False;
begin
The_Pack_Of_Spy.Delete (The_List_Of_Spy, The_Element, Is_Ok);
return Is_Ok;
end Orb_Unsubscription;
-- *********************************************
procedure Filtration is
begin
[statement]
end Filtration;
-- *********************************************
procedure Unfiltration is
begin
[statement]
end Unfiltration;
-- *********************************************
procedure Send_Answer (Number_Of_The_Question : Natural;
The_Host : Transport_Defs.Host_Id;
The_Socket : Transport_Defs.Socket_Id;
The_Connection_Data : in out
Our_Constantes.Connection_Data) is
The_Answer_Message : Message.Type_Of_Message;
begin
The_Answer_Message.The_Command := Our_Constantes.None;
The_Answer_Message.The_Host_Machine_Send :=
Our_Constantes.The_Orb.The_Host;
The_Answer_Message.The_Socket_Send := Our_Constantes.The_Orb.The_Socket;
The_Answer_Message.The_Host_Machine_Receive := The_Host;
The_Answer_Message.The_Socket_Receive := The_Socket;
The_Answer_Message.Command_Is_Ok := True;
The_Answer_Message.Number_Of_The_Question := Number_Of_The_Question;
Text_Io.Put_Line ("Essai de reponse");
Communication.Transmitter (The_Answer_Message, The_Connection_Data);
Communication.Disconnection (The_Connection_Data);
Text_Io.Put_Line ("Reponse Envoyee");
end Send_Answer;
-- *********************************************
task Orb_Task is
entry Ok_Message_Is_Receive (The_Message : in Message.Type_Of_Message);
end Orb_Task;
task body Orb_Task is
--The_Message : Message.Type_Of_Message;
Is_Ok : Boolean := True;
Continue_Orb : Boolean := True;
begin
while Continue_Orb loop
accept Ok_Message_Is_Receive
(The_Message : in Message.Type_Of_Message) do
Text_Io.Put_Line ("T_Orb : case");
case The_Message.The_Command is
when The_Registration =>
Text_Io.Put_Line ("essai registration");
Is_Ok := Orb_Registration
(The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send);
if Is_Ok then
Text_Io.Put_Line ("T_Orb Registration Ok");
else
Text_Io.Put_Line ("T_Orb Registration not Ok");
end if;
when The_Unregistration =>
Text_Io.Put_Line ("essai unregistration");
Is_Ok := Orb_Unregistration
(The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send);
if Is_Ok then
Text_Io.Put_Line ("T_Orb UnRegistration Ok");
else
Text_Io.Put_Line ("T_Orb UnRegistration not Ok");
end if;
when The_Query =>
null;
when The_Request =>
Orb_Request (The_Message,
Our_Constantes.The_Orb_Connection);
Send_Answer (The_Message.Number_Of_The_Question,
The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
Our_Constantes.The_Orb_Connection);
when The_Notification =>
Orb_Notification (The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
The_Message.Data,
Our_Constantes.The_Orb_Connection);
Send_Answer (The_Message.Number_Of_The_Question,
The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
Our_Constantes.The_Orb_Connection);
when The_Forward =>
Orb_Forward (The_Message,
Our_Constantes.The_Orb_Connection);
Send_Answer (The_Message.Number_Of_The_Question,
The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
Our_Constantes.The_Orb_Connection);
when The_Publication =>
null;
when The_Unpublication =>
null;
when The_Subscription =>
Is_Ok := Orb_Subscription
(The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
The_Spy_Number);
if Is_Ok then
Text_Io.Put_Line ("T_Orb Subscription Ok");
else
Text_Io.Put_Line ("T_Orb Subscription not Ok");
end if;
Send_Answer (The_Message.Number_Of_The_Question,
The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
Our_Constantes.The_Orb_Connection);
when The_Unsubscription =>
Is_Ok := Orb_Unsubscription
(The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
The_Spy_Number);
if Is_Ok then
Text_Io.Put_Line ("T_Orb Unsubscription Ok");
else
Text_Io.Put_Line ("T_Orb Unsubscription not Ok");
end if;
Send_Answer (The_Message.Number_Of_The_Question,
The_Message.The_Host_Machine_Send,
The_Message.The_Socket_Send,
Our_Constantes.The_Orb_Connection);
when The_Filtration =>
null;
when The_Unfiltration =>
null;
when others =>
Text_Io.Put_Line ("T_Orb : Message traite ok");
end case;
end Ok_Message_Is_Receive;
end loop;
end Orb_Task;
-- *********************************************
task Orb_Receiver_Task;
task body Orb_Receiver_Task is
The_Message : Message.Type_Of_Message;
Continue_Receiver : Boolean := True;
begin
while Continue_Receiver loop
Text_Io.Put_Line ("T_Receive : reception ... ");
Communication.Connection_Receiver
(The_Orb.The_Socket, The_Orb_Connection);
Communication.Receiver (The_Message, The_Orb_Connection);
Communication.Disconnection (The_Orb_Connection);
Text_Io.Put_Line ("T_Receive : 1 Message est recu");
Orb_Task.Ok_Message_Is_Receive (The_Message);
end loop;
end Orb_Receiver_Task;
-- *********************************************
begin
null;
end The_Orb_Package;
nblk1=15
nid=2
hdr6=26
[0x00] rec0=23 rec1=00 rec2=01 rec3=066
[0x01] rec0=17 rec1=00 rec2=03 rec3=066
[0x02] rec0=1b rec1=00 rec2=13 rec3=054
[0x03] rec0=1b rec1=00 rec2=12 rec3=01e
[0x04] rec0=20 rec1=00 rec2=04 rec3=00a
[0x05] rec0=15 rec1=00 rec2=07 rec3=012
[0x06] rec0=1b rec1=00 rec2=11 rec3=05e
[0x07] rec0=1a rec1=00 rec2=08 rec3=03c
[0x08] rec0=1d rec1=00 rec2=15 rec3=02a
[0x09] rec0=1c rec1=00 rec2=06 rec3=00c
[0x0a] rec0=22 rec1=00 rec2=0f rec3=004
[0x0b] rec0=17 rec1=00 rec2=10 rec3=00a
[0x0c] rec0=1a rec1=00 rec2=05 rec3=006
[0x0d] rec0=13 rec1=00 rec2=0e rec3=060
[0x0e] rec0=11 rec1=00 rec2=14 rec3=04e
[0x0f] rec0=15 rec1=00 rec2=0d rec3=056
[0x10] rec0=11 rec1=00 rec2=0b rec3=07a
[0x11] rec0=21 rec1=00 rec2=0a rec3=02c
[0x12] rec0=0b rec1=00 rec2=0c rec3=000
[0x13] rec0=17 rec1=00 rec2=0c rec3=000
[0x14] rec0=17 rec1=00 rec2=0c rec3=000
tail 0x2175f93dc87bd478fcd5d 0x42a00088462060003
Free Block Chain:
0x2: 0000 00 09 03 fc 80 35 20 20 20 20 20 20 54 68 65 5f ┆ 5 The_┆
0x9: 0000 00 00 03 cf 80 03 72 69 63 03 00 47 20 20 20 20 ┆ ric G ┆