Adding server-related collaborative code
    The next step is to add the server-specific pieces.
    
    First, we'll add a serviceName which is needed for
    the client to be able to find the server.  As mentioned in
    the collaboration overview,
    using the application's class name is a simple way to get a unique
    service name.  Since our simple application is using static methods,
    that won't work.  Instead, we'll just add a static variable to
    the class file.
    
    We also need to provide a server-specific data initialization method.
    Since the setupData() method will only be run by the server,
    we'll rename that to setupServer() (we'll be adding a
    setupClient() method in the next step).  We then
    add the calls to ClientServer.startServer() and to
    server.addDisplay() as detailed in
    the collaboration overview.
    (Since the sample application doesn't need to reference any data
    objects, we can skip the server.addDataReferences() step
    mentioned there.)
    
    Again, verify that the application works after you've finished
    changing everything.
    
    Here is the sample application with the server-specific changes:
    
    Prev
    Next
    
    
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.IOException;
import java.rmi.RemoteException;
import visad.*;
import visad.data.DefaultFamily;
import visad.java2d.DisplayImplJ2D;
import visad.util.ClientServer;
public class DisplayGIF
{
  
  private static final String fileURL = "http://www.ssec.wisc.edu/~billh/billh.gif";
  
  private static final String serviceName = "CollabGIF";
  private static DisplayImpl setupServer()
    throws IOException, RemoteException, VisADException
  {
    
    DisplayImpl dpy = new DisplayImplJ2D("display");
    
    FlatField image = (FlatField )new DefaultFamily("dflt").open(fileURL);
    
    FunctionType ftype = (FunctionType )image.getType();
    RealTupleType dtype = ftype.getDomain();
    RealTupleType rtype9 = (RealTupleType )ftype.getRange();
    dpy.addMap(new ScalarMap((RealType )dtype.getComponent(0),
                             Display.XAxis));
    dpy.addMap(new ScalarMap((RealType )dtype.getComponent(1),
                             Display.YAxis));
    dpy.addMap(new ScalarMap((RealType )rtype9.getComponent(0),
                             Display.Red));
    dpy.addMap(new ScalarMap((RealType )rtype9.getComponent(1),
                             Display.Green));
    dpy.addMap(new ScalarMap((RealType )rtype9.getComponent(2),
                             Display.Blue));
    
    DataReferenceImpl ref_image = new DataReferenceImpl("ref_image");
    ref_image.setData(image);
    dpy.addReference(ref_image, null);
    
    RemoteServerImpl server = ClientServer.startServer(serviceName);
    server.addDisplay(new RemoteDisplayImpl(dpy));
    return dpy;
  }
  private static void setupUI(DisplayImpl dpy)
  {
    
    JFrame jframe = new JFrame("GIF");
    jframe.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) { System.exit(0); }
      });
    
    jframe.setContentPane((Container )dpy.getComponent());
    
    jframe.pack();
    jframe.setVisible(true);
  }
  public static void main(String[] args)
    throws IOException, RemoteException, VisADException
  {
    DisplayImpl dpy = setupServer();
    setupUI(dpy);
  }
}
    
    
    Prev
    Next
    
    
    
Last modified: Wed Jul 12 10:56:46 CDT 2000