/* * CollaborationHandler * * Version 1.0 * * 20061017 * * Author: Jenny Nordgren */ /** * CollaborationHandler sköter kopplingen till ett annat ritfönster och skickar och tar emot information om vad som ska ritas ut. * */ import javax.swing.*; import java.awt.event.*; import java.awt.event.MouseListener; import java.net.InetAddress; import java.net.*; import java.io.*; import javax.swing.event.*; public class CollaborationHandler implements Runnable { private Thread t = new Thread(this); private InetAddress addr; private int myPort; private int remotePort; private Boolean fetch = true; private Paper canvas; private DatagramSocket socket; private Whiteboard whiteboard; /** * Konstruktor som skapar en socket samt en tråd som sköter hämtning av information från begärd host * */ public CollaborationHandler(String host, int myPort, int remotePort) { this.myPort = myPort; this.remotePort = remotePort; try { addr = InetAddress.getByName(host); socket = new DatagramSocket(myPort); socket.connect(addr, remotePort); t.start(); } catch (Exception e){ whiteboard.updateMessageLabel("Could not connect to " + host + " at port " + String.valueOf(remotePort)); } } /** * Lyssnar efter nya objekt från samarbetsfönstret */ public void run() { while(fetch) { try { byte[] recvBuf = new byte[5000]; DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length); socket.receive(packet); ByteArrayInputStream byteStream = new ByteArrayInputStream(recvBuf); ObjectInputStream is = new ObjectInputStream(new BufferedInputStream(byteStream)); MouseEvent me =(MouseEvent)is.readObject(); is.close(); if(me != null) { eventRecieved(me); } } catch (IOException io) {} catch (ClassNotFoundException cnfe){} } } /** * Skickar en MouseEvent på utströmmen * */ public void sendEvent(MouseEvent me) { try { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(5000); ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(byteStream)); os.flush(); os.writeObject(me); os.flush(); byte[] sendBuffer = byteStream.toByteArray(); DatagramPacket packet = new DatagramPacket(sendBuffer, sendBuffer.length, addr, remotePort); socket.send(packet); os.close(); } catch (Exception e) { } } /** * Lägger till en punkt när ett MouseEvent mottagits på input-strömmen */ public void eventRecieved(MouseEvent me) { canvas.addPoint(me.getPoint()); } /** * Avslutar loopen i run-metoden */ public void CloseConnection() { fetch = false; } /** * Sätter whiteboard-fönster som ska hanteras. */ public void setWhiteboard(Whiteboard whiteboard) { this.whiteboard = whiteboard; } /** * Sätter paper som ska ritas på. */ public void setCanvas(Paper canvas) { this.canvas = canvas; } }