Changes to attempt to silence bcc64x
[ACE_TAO.git] / TAO / examples / Content_Server / AMI_Iterator / README
blob8f29d419ab92a4d3d9ac9c7eae584ff6da02a659
3 This program illustrates how to implement a simple client and server
4 using CORBA, IIOP, and asynchronous method invocations (AMI).  Client
5 applications can use this service to download and display files from a
6 CORBA server on the network.  The core functionality of this program
7 is as follows:
9         * Client applications will use an iterator in conjunction with AMI
10           to download and display files from multiple CORBA server one
11           ``chunk'' at a time simultaneously, without requiring
12           multiple threads.  This design will help improve the memory
13           management overhead on the client and server.
15         * Operations in the IDL interface will use exceptions to propagate
16           problems back to clients.
18         * The CORBA Naming Service is used to bind and resolve object
19           references, rather than using a file.
21 The client program performs the following activities:
23         1. From the command-line, it reads the name of the pathname
24            you want to download.  It then initializes the client-side
25            ORB and uses resolve_initial_references() to obtain a
26            reference to a Naming Service (which must be running). This
27            object reference is then downcast via _narrow() to an
28            object reference for a CosNaming::NamingContext interface,
29            which is then used to resolve the object reference that the
30            server bound earlier.  After narrowing this to the Server
31            interface, the get_iterator() operation is called via the
32            object reference to obtain the Chunk_Iterator, which is
33            used to download the file.
35         2. The client invokes the sendc_next_chunk() method on the
36            iterator, passing in the offset and the object reference to
37            the client's reply handler.  Only one pending call at a
38            time per-server.  To relax this constraint would require
39            some type of offset parameter to the next_chunk() callback
40            to perform reassembly if chunks for the same file arrived
41            out of order.
43         3. When next_chunk() returns a chunk of the file, the contents
44            are written into a temporary file created in your a cache
45            (e.g., /tmp/yourloginname) on the local host.  Then, an
46            external viewer is spawned to display the file.  The type
47            of viewer to spawn is determined by examining the the
48            content_type_ metadata returned by the server.
50 The example can be run as follows:
52         1. Start the Name Service:
54                 $ NameService -o /tmp/ns.ior
56         2. Start the SMI Content Server:
58                 $ server -ORBInitRef NameService=file:///tmp/ns.ior
60         3. Request a file using the client:
62                 $ client -ORBInitRef NameService=file:///tmp/ns.ior \
63                 ~/foo.jpg ~/bar.jpg
65 This example can service multiple file requests.
67 ----------------------------------------
69 The server output should look like the following:
71 $ ./server -ORBInitRef NameService=file:///tmp/ns.ior
72 Bound <Iterator_Factory> to <IOR:010000002400000049444c3a57653625f5365727665722f4974657261746f725f466163746f72793a312e300001000000000000007c000000010102001400000076616c696e6f12722e6563652e7563692e65647500f39600001b00000014010f00525354bd9d4e39a6ac03000000000001000000010000000003000000000000000800000001000000004f4154010000001400000001ad85e4001000100000000000901010000000000004f41540400000001ac0000> in Name Service.
73 Accepting requests.
74 Received request for file: </home/myhome/foo.jpg>
75 Sending chunk 1 at offset <0> of size <8192>
76 Received request for file: </home/myhome/bar.jpg>
77 Sending chunk 2 at offset <8192> of size <8192>
78 Sending chunk 1 at offset <0> of size <8192>
79 Sending chunk 3 at offset <16384> of size <8192>
80 Sending chunk 4 at offset <24576> of size <8192>
81 Sending chunk 2 at offset <8192> of size <8192>
82 Sending chunk 5 at offset <32768> of size <4573>
83 Sending chunk 3 at offset <16384> of size <8192>
84 Sending chunk 4 at offset <24576> of size <8192>
85 Sending chunk 5 at offset <32768> of size <6997>
87 Notice that requests for chunks of data from two separate files occur
88 in the above run.
90 ----------------------------------------
92 The client output should look similar to:
94 $ ./client -ORBInitRef NameService=file:///tmp/ns.ior ~/foo.jpg ~/bar.jpg
95 Wrote retrieved data to file </tmp/ace-file-nBqLM2>
96 Spawned viewer <xv> with PID <11134>.
97 Wrote retrieved data to file </tmp/ace-file-MKURUU>
98 Spawned viewer <xv> with PID <11135>.