Next: , Previous: Remote Access to Subprograms (RAS), Up: Pragma Remote_Call_Interface


8.1.4.4 Remote Access to Class Wide Types (RACW)

A bank client is now connected to a bank through a terminal. The bank wants to notify a connected client, by means of a message on its terminal, when another client transfers a given amount of money to its account. In the following example, a terminal is designed as a distributed object. Each bank client will register its terminal object to the bank server for further use. In the code below, Term_Type is the root type of the distributed terminal hierarchy.

     
     with Types; use Types;
     package Terminal is
        pragma Pure;
     
        type Term_Type is abstract tagged limited private;
     
        procedure Notify
          (MyTerm   : access Term_Type;
           Payer    : in Customer_Type;
           Amount   : in Integer) is abstract;
     
     private
        --  implementation removed
     end Terminal;
     

In the code below, the RCI unit RACWBank defines Term_Access, a remote access to class wide type. Term_Access becomes a reference to a distributed object. In the next section, we will see how to derive and extend Term_Type, how to create a distributed object and how to use a reference to it.

     
     with Terminal, Types; use Terminal, Types;
     package RACWBank is
        pragma Remote_Call_Interface;
     
        type Term_Access is access all Term_Type'Class;
     
        procedure Register
          (MyTerm   : in Term_Access;
           Customer : in Customer_Type;
           Password : in Password_Type);
     
        --  [...] Other services
     end RACWBank;