/******************************************************************************* *Uppgift4.2.1 - IP1. *Ninis Whiteboard * *@Java version "1.5.0_06" *@Author Véronique Rarchaert *@vero-rar@dsv.su.se *********************************************************************************/ import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; import java.net.*; import java.io.*; /********************************************************************************************* *Uppgift4.2.1 är ett fristående program med ett grafiskt användargränssnitt som implementerar *ett enkelt distribuerat ritprogram (whiteboard). Allt som ritas sänds med UDP till ett annat *program identiskt som ritar upp exakt samma bild. Det andra programmet fungerar på samma sätt. *********************************************************************************************/ public class Draw extends JFrame { public Paper p = new Paper(); public HashSet hs = new HashSet(); /************************************************************************* *Kör igång programmet med: java Draw **************************************************************************/ public static void main(String[] arg) { if(arg.length == 3) new Draw(); if (arg.length != 3) System.out.println("Usage: java Draw "); return; }//main /********************************************************** *Metod addPoint som lägger till Point **********************************************************/ private void addPoint(Point p) { hs.add(p); repaint(); }//addPoint /********************************************************** *Konstruktor **********************************************************/ public Draw() { setDefaultCloseOperation(EXIT_ON_CLOSE); getContentPane().add(p, BorderLayout.CENTER); setSize(640, 480); setVisible(true); }//konstruktor class Paper extends JPanel { public HashSet hs = new HashSet(); public Paper() { setBackground(Color.white); addMouseListener(new L1()); addMouseMotionListener(new L2()); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.black); Iterator i = hs.iterator(); while(i.hasNext()) { Point p = (Point)i.next(); g.fillOval(p.x, p.y, 2, 2); }//while }//paintComponent public synchronized void send(Point p) { hs.add(p); repaint(); }//send class L1 extends MouseAdapter { public void mousePressed(MouseEvent me) { send(me.getPoint()); }//mousePressed } class L2 extends MouseMotionAdapter { public void mouseDragged(MouseEvent me) { send(me.getPoint()); }//mouseDragged } class Net extends Thread { private Draw draw; private String host; private int myPort; private int toPort; private String message; public Net(Draw draw, String[] args) { this.draw = draw; this.myPort = Integer.parseInt(args[0]); this.host = args[1]; this.toPort = Integer.parseInt(args[2]); start(); }//Net public void send(Point p) { try { String m = Integer.toString(p.x) + " " + Integer.toString(p.y); byte[] data = m.getBytes(); InetAddress toAddress = InetAddress.getByName(host); DatagramPacket packet = new DatagramPacket(data, data.length, toAddress, toPort); DatagramSocket s = new DatagramSocket(); s.send(packet); } catch(Exception e) { System.out.println(e); }//catch }//send public void run() { try { DatagramSocket s = new DatagramSocket(myPort); while(true) { byte[] data = new byte[8192]; DatagramPacket packet = new DatagramPacket(data, data.length); s.receive(packet); String[] xy = message.split(" "); Point p = new Point(Integer.parseInt(xy[0]), Integer.parseInt(xy[1])); draw.addPoint(new Point(p)); }//while } catch(Exception e) { System.out.println(e); }//catch }//run }//Net } }