00001 package edu.stanford.hci.r3.flash.whiteboard;
00002
00003 import java.awt.Color;
00004 import java.awt.Desktop;
00005 import java.io.File;
00006 import java.io.IOException;
00007 import java.net.URI;
00008 import java.net.URISyntaxException;
00009 import java.net.URL;
00010 import java.util.ArrayList;
00011 import java.util.List;
00012
00013 import net.sf.wraplog.SystemLogger;
00014
00015 import edu.stanford.ejalbert.BrowserLauncher;
00016 import edu.stanford.ejalbert.exception.BrowserLaunchingExecutionException;
00017 import edu.stanford.ejalbert.exception.BrowserLaunchingInitializingException;
00018 import edu.stanford.ejalbert.exception.UnsupportedOperatingSystemException;
00019 import edu.stanford.hci.r3.PaperToolkit;
00020 import edu.stanford.hci.r3.actions.types.OpenURL2Action;
00021 import edu.stanford.hci.r3.flash.FlashCommunicationServer;
00022 import edu.stanford.hci.r3.flash.FlashListener;
00023 import edu.stanford.hci.r3.pen.Pen;
00024 import edu.stanford.hci.r3.pen.PenSample;
00025 import edu.stanford.hci.r3.pen.streaming.listeners.PenListener;
00026 import edu.stanford.hci.r3.util.DebugUtils;
00027 import edu.stanford.hci.r3.util.files.FileUtils;
00028
00040 public class FlashWhiteboard {
00041
00042 private FlashCommunicationServer flash;
00043
00044 private List<Pen> pens = new ArrayList<Pen>();
00045
00046 private int port;
00047
00048 private Color swatchColor;
00049
00050 private String title;
00051
00052 public FlashWhiteboard(int portNum) {
00053 port = portNum;
00054 }
00055
00056 public void load() {
00057
00058 flash = new FlashCommunicationServer(port);
00059 flash.addFlashClientListener(new FlashListener() {
00060 @Override
00061 public void messageReceived(String command) {
00062 if (command.equals("Flash Client Connected")) {
00063 DebugUtils.println("Connected!");
00064 flash.sendMessage("<swatchColor r='" + swatchColor.getRed() + "' g='"
00065 + swatchColor.getGreen() + "' b='" + swatchColor.getBlue() + "'/>");
00066 flash.sendMessage("<title value='" + title + "'/>");
00067 } else {
00068 DebugUtils.println("Unhandled command: " + command);
00069 }
00070 }
00071
00072 });
00073
00074 File r3RootPath = PaperToolkit.getToolkitRootPath();
00075 File whiteBoardHTML = new File(r3RootPath, "flash/bin/Whiteboard.html");
00076 String fileStr = FileUtils.readFileIntoStringBuffer(whiteBoardHTML, true).toString();
00077 fileStr = fileStr.replace("PORT_NUM", port + "");
00078 whiteBoardHTML = new File(r3RootPath, "flash/bin/Whiteboard_" + port + ".html");
00079 FileUtils.writeStringToFile(fileStr, whiteBoardHTML);
00080 URI uri = whiteBoardHTML.toURI();
00081 try {
00082 DebugUtils.println("Loading the Flash GUI...");
00083 Desktop.getDesktop().browse(uri);
00084 } catch (IOException e) {
00085 e.printStackTrace();
00086 }
00087 }
00088
00089 public void addPen(Pen pen) {
00090 pens.add(pen);
00091 pen.startLiveMode();
00092 pen.addLivePenListener(new PenListener() {
00093
00094 @Override
00095 public void penDown(PenSample sample) {
00096 flash.sendMessage("<penDownEvent/>");
00097 flash.sendMessage(sample.toXMLString());
00098 }
00099
00100 @Override
00101 public void penUp(PenSample sample) {
00102 flash.sendMessage(sample.toXMLString());
00103 }
00104
00105 @Override
00106 public void sample(PenSample sample) {
00107 flash.sendMessage(sample.toXMLString());
00108 }
00109
00110 });
00111 }
00112
00113 public void setSwatchColor(Color color) {
00114 swatchColor = color;
00115 }
00116
00117 public void setTitle(String titleStr) {
00118 title = titleStr;
00119 }
00120 }