DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

+ Reply to Thread
Results 1 to 2 of 2

Hybrid View

  1. #1
    Join Date
    May 2006
    Posts
    1

    JAVA RMI : A Shared Whiteboard

    Hello

    i just want to know how to compile this "java rmi" code of a shared whiteboard

    and how could i'm implement/embed it in my website
    this the code. for better explaination go through http://www.unix.org.ua/orelly/java-ent/dist/ch10_02.htm

    Example 1: A Shared Whiteboard Client

    Code:
    package dcj.examples.Collaborative;
    
    import dcj.util.Collaborative.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.Hashtable;
    import java.util.Properties;
    import java.io.IOException;
    import java.rmi.RemoteException;
    
    public class WhiteboardUser extends RMICollaboratorImpl
                                implements MouseListener, MouseMotionListener
    {
      protected Hashtable lastPts = new Hashtable();
      protected Component whiteboard;
      protected Image buffer;
    
      public WhiteboardUser(String name, Color color, String host, String mname)
             throws RemoteException {
        super(name);
        Properties p = new Properties();
        p.put("host", host);
        p.put("mediatorName", mname);
        connect(p);
        getIdentity().setProperty("color", color);
        System.out.println("color = " + color.getRed()
                           + " " + color.getGreen() + " "
                           + color.getBlue());
        buildUI();
      }
    
      protected void buildUI() {
        Frame f = new Frame();
        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        f.setLayout(gridbag);
        f.addNotify();
        c.fill = GridBagConstraints.BOTH;
        c.gridwidth = GridBagConstraints.REMAINDER;
        Canvas canvas1 = new java.awt.Canvas();
        canvas1.setSize(240,180);
        canvas1.setBackground(Color.white);
        gridbag.setConstraints(canvas1, c);
        f.add(canvas1);
        String name = null;
        try {
          name = getIdentity().getName();
        }
        catch (Exception e) {
          name = "unknown";
        }
        Label label1 = new java.awt.Label("Your name: " + name);
        label1.setSize(100,30);
        gridbag.setConstraints(label1, c);
        f.add(label1);
        f.setSize(240,210);
        f.show();
        whiteboard = canvas1;
        whiteboard.addMouseListener(this);
        whiteboard.addMouseMotionListener(this);
        buffer = whiteboard.createImage(f.getSize().width,
                                        f.getSize().height);
      }
    
      public void mousePressed(MouseEvent ev) {
        Point evPt = ev.getPoint();
        try {
          broadcast("start", evPt);
        }
        catch (Exception e) {}
      }
    
      public void mouseReleased(MouseEvent ev) {
        Point evPt = ev.getPoint();
        try {
          broadcast("end", evPt);
        }
        catch (Exception e) {}
      }
    
      public void mouseDragged(MouseEvent ev) {
        Point evPt = ev.getPoint();
        try {
          broadcast("drag", evPt);
        }
        catch (Exception e) {
        }
      }
    
      public void mouseExited(MouseEvent ev) {}
      public void mouseMoved(MouseEvent ev) {}
      public void mouseClicked(MouseEvent ev) {}
      public void mouseEntered(MouseEvent ev) {}
    
      public boolean notify(String tag, Object data, Identity src)
                     throws IOException, RemoteException {
    
        Color origColor = null;
        Color agentColor = null;
        Graphics gr = buffer.getGraphics();
        try {
          agentColor = (Color)src.getProperty("color");
          if (agentColor != null) {
            gr.setColor(agentColor);
          }
          else {
            System.out.println("No agent color available.");
          }
        }
        catch (Exception exc) {
          System.out.println("Exception while switching colors.");
          exc.printStackTrace();
        }
    
        if (tag.compareTo("start") == 0) {
          lastPts.put(src.getName(), data);
        }
        else if (tag.compareTo("drag") == 0) {
          Point lastPt = (Point)lastPts.get(src.getName());
          Point currPt = (Point)data;
          gr.drawLine(lastPt.x, lastPt.y, currPt.x, currPt.y);
          lastPts.put(src.getName(), data);
        }
        else if (tag.compareTo("end") == 0) {
          Point lastPt = (Point)lastPts.get(src.getName());
          Point currPt = (Point)data;
          gr.drawLine(lastPt.x, lastPt.y, currPt.x, currPt.y);
          lastPts.remove(src.getName());
        }
    
        whiteboard.getGraphics().drawImage(buffer, 0, 0, whiteboard);
    
        return true;
      }
    }

    Example 2: A Multithreaded Whiteboard Client

    Code:
    package dcj.examples.Collaborative;
    
    import dcj.util.Collaborative.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.Hashtable;
    import java.util.Properties;
    import java.io.IOException;
    import java.rmi.RemoteException;
    import java.util.Vector;
    
    public class ThreadedWhiteboardUser 
        extends RMICollaboratorImpl
        implements java.awt.event.MouseListener,
                   java.awt.event.MouseMotionListener
    {
      protected Hashtable lastPts = new Hashtable();
      protected Component whiteboard;
      protected Image buffer;
      protected CommHelper helper;
    
      public ThreadedWhiteboardUser(String name, Color color,
                                    String host, String mname)
             throws RemoteException {
        super(name, host, mname);
        getIdentity().setProperty("color", color);
        buildUI();
        helper = new CommHelper(this);
        helper.start();
      }
    
      protected void buildUI() {
        Frame f = new Frame();
        GridBagLayout gridbag = new GridBagLayout();
        GridBagConstraints c = new GridBagConstraints();
        f.setLayout(gridbag);
        f.addNotify();
        c.fill = GridBagConstraints.BOTH;
        c.gridwidth = GridBagConstraints.REMAINDER;
        Canvas canvas1 = new java.awt.Canvas();
        canvas1.setSize(240,180);
        canvas1.setBackground(Color.white);
        gridbag.setConstraints(canvas1, c);
        f.add(canvas1);
        String name = null;
        try {
          name = getIdentity().getName();
        }
        catch (Exception e) {
          name = "unknown";
        }
        Label label1 = new java.awt.Label("Your name: " + name);
        label1.setSize(100,30);
        gridbag.setConstraints(label1, c);
        f.add(label1);
        f.setSize(240,210);
        f.show();
        whiteboard = canvas1;
        whiteboard.addMouseListener(this);
        whiteboard.addMouseMotionListener(this);
        buffer = whiteboard.createImage(f.getSize().width,
                                        f.getSize().height);
      }
    
      protected void nextLine(String agent, Point pt, Color c) {
        Graphics g = buffer.getGraphics();
        g.setColor(c);
        Point lastPt = (Point)lastPts.get(agent);
        g.drawLine(lastPt.x, lastPt.y, pt.x, pt.y);
        whiteboard.getGraphics().drawImage(buffer, 0, 0, whiteboard);
      }
    
      public void mousePressed(MouseEvent ev) {
        Point evPt = ev.getPoint();
        try {
          lastPts.put(getIdentity().getName(), evPt);
          CommHelper.addMsg("start", evPt);
        }
        catch (Exception e) {}
      }
    
      public void mouseReleased(MouseEvent ev) {
        Point evPt = ev.getPoint();
        try {
          nextLine(getIdentity().getName(), evPt,
                   (Color)getIdentity().getProperty("color"));
          lastPts.remove(getIdentity().getName());
          helper.addMsg("end", evPt);
        }
        catch (Exception e) {}
      }
    
      public void mouseDragged(MouseEvent ev) {
        Point evPt = ev.getPoint();
        try {
          nextLine(getIdentity().getName(), evPt,
                 (Color)getIdentity().getProperty("color"));
          lastPts.put(getIdentity().getName(), evPt);
          helper.addMsg("drag", evPt);
        }
        catch (Exception e) {}
      }
    
      public void mouseExited(MouseEvent ev) {}
      public void mouseMoved(MouseEvent ev) {}
      public void mouseClicked(MouseEvent ev) {}
      public void mouseEntered(MouseEvent ev) {}
    
      public boolean notify(String tag, Object data, Identity src)
                     throws IOException, RemoteException {
    
        // If this is our own event, ignore it since it's already been handled.
        if (src.getName().compareTo(getIdentity().getName()) == 0) {
          return true;
        }
    
        Color agentColor = null;
        try {
          agentColor = (Color)src.getProperty("color");
        }
        catch (Exception exc) {
          System.out.println("Exception while getting color.");
          exc.printStackTrace();
        }
    
        if (tag.compareTo("start") == 0) {
          // First point along a path, save it and continue
          lastPts.put(src.getName(), data);
        }
        else if (tag.compareTo("drag") == 0) {
          // Next point in a path, draw a line from the last
          // point to here, and save this point as the last point.
          nextLine(src.getName(), (Point)data, agentColor);
          lastPts.put(src.getName(), data);
        }
        else if (tag.compareTo("end") == 0) {
          // Last point in a path, so draw the line and remove
          // the last point.
          nextLine(src.getName(), (Point)data, agentColor);
          lastPts.remove(src.getName());
        }
    
        return true;
      }
    }
    if someone can help me to embed it in my website i'm really appreciate it.

  2. #2
    Join Date
    Jan 2007
    Posts
    1
    The main difficulty is to sign the applet, so the navigators allow the applet to open a TCP connection to the server. For this you need to create a jar file with jar, create a private/public keypair with keytool, and sign the applet with jarsigner. I have done this for a home made applet.

    I hope that this late answer is still hopefull for you.

Similar Threads

  1. Re: App Object (fixes)
    By Rob Teixeira in forum .NET
    Replies: 129
    Last Post: 06-06-2002, 05:23 AM
  2. App Object
    By Rob Teixeira in forum .NET
    Replies: 15
    Last Post: 05-31-2002, 03:30 PM
  3. Replies: 0
    Last Post: 04-26-2001, 10:01 PM
  4. An open invitation
    By Chris P. in forum Java
    Replies: 0
    Last Post: 12-04-2000, 07:55 PM
  5. An open invitation
    By Chris P. in forum Java
    Replies: 0
    Last Post: 12-04-2000, 07:52 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


Top DevX Stories

Easy Web Services with SQL Server 2005 HTTP Endpoints
JavaOne 2005: Java Platform Roadmap Focuses on Ease of Development, Sun Focuses on the "Free" in F.O.S.S.
Wed Yourself to UML with the Power of Associations
Microsoft to Add AJAX Capabilities to ASP.NET
IBM's Cloudscape Versus MySQL


Sponsored Links