This file directory contains the MICO version of the example discussed in class on 3/4/99. (The code we looked at in class was actually the omniORB version.) It differs from the initial matrix-vector product version described in the preceding section mainly in that the first call in the client on block_product is performed using a Dynamic Invocation Interface (DII) request, with the request being sent to the server via a send_deferred call. Thus, according to DII semantics, it is non-blocking, and the client is able to proceed with the second block_product call to another server without waiting for the first one to finish. The example illustrates both using the DII--including some details that are not covered in the textbook (Chapter 15), such how to pass and receive objects of user-defined types--and using type Any. The main code changes between the sequential version and this parallel version are in client.cpp; no changes to the server code were necessary to make the server instances work in parallel. Note that some changes were necessary also in Makefile and Makefile.win32, to get the IDL compiler to generate extra code (such as type conversions between user-defined types and type Any) needed by the DII.
I also made a minor change in the server and client to have each get the matrix size, N, from the command line, and to check for the proper number of command-line parameters. I haven't made this change yet in the omniORB version.
I've compiled this example on Windows 95, with nmake/f Makefile.win32 all, and on SunOS, with make all. In the latter case I used Shawn Bisgrove's installation of MICO on dishwasher; see his DSC web page to see how to set up your bash environment variables to point to his installation and get the proper MakeVars file. It doesn't seem to be possible to compile using the FreeBSD version of MICO on monica, since that version doesn't recognize the requisite IDL parameters for generating DII-related information. Anyway, with the SunOS version the linker works reasonably fast, which is not the case with the FreeBSD version.
I've run this example successfully with several different client-server configurations, including: