GUAC-1435: Go through webapp tutorial. Verify correctness. Add resulting source.
Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/commit/92f04899 Tree: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/tree/92f04899 Diff: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/diff/92f04899 Branch: refs/heads/master Commit: 92f048992a7cf814bac7e2ed5c9828947946219c Parents: 97af0b6 Author: Michael Jumper <[email protected]> Authored: Tue Dec 15 15:11:47 2015 -0800 Committer: Michael Jumper <[email protected]> Committed: Tue Dec 15 15:11:47 2015 -0800 ---------------------------------------------------------------------- tutorials/guacamole-tutorial/.gitignore | 3 + tutorials/guacamole-tutorial/pom.xml | 79 ++++++++++++++++++++ .../example/TutorialGuacamoleTunnelServlet.java | 38 ++++++++++ .../src/main/webapp/WEB-INF/web.xml | 28 +++++++ .../src/main/webapp/index.html | 68 +++++++++++++++++ 5 files changed, 216 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/92f04899/tutorials/guacamole-tutorial/.gitignore ---------------------------------------------------------------------- diff --git a/tutorials/guacamole-tutorial/.gitignore b/tutorials/guacamole-tutorial/.gitignore new file mode 100644 index 0000000..c3a023f --- /dev/null +++ b/tutorials/guacamole-tutorial/.gitignore @@ -0,0 +1,3 @@ +*~ +target/ +META-INF/ http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/92f04899/tutorials/guacamole-tutorial/pom.xml ---------------------------------------------------------------------- diff --git a/tutorials/guacamole-tutorial/pom.xml b/tutorials/guacamole-tutorial/pom.xml new file mode 100644 index 0000000..a394b23 --- /dev/null +++ b/tutorials/guacamole-tutorial/pom.xml @@ -0,0 +1,79 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 + http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + <groupId>org.glyptodon.guacamole</groupId> + <artifactId>guacamole-tutorial</artifactId> + <packaging>war</packaging> + <version>0.9.9</version> + <name>guacamole-tutorial</name> + <url>http://guac-dev.org/</url> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <build> + <plugins> + + <!-- Compile using Java 1.6 --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <source>1.6</source> + <target>1.6</target> + </configuration> + </plugin> + + <!-- Overlay guacamole-common-js (zip) --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-war-plugin</artifactId> + <configuration> + <overlays> + <overlay> + <groupId>org.glyptodon.guacamole</groupId> + <artifactId>guacamole-common-js</artifactId> + <type>zip</type> + </overlay> + </overlays> + </configuration> + </plugin> + + </plugins> + + </build> + + <dependencies> + + <!-- Servlet API --> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.5</version> + <scope>provided</scope> + </dependency> + + <!-- Main Guacamole library --> + <dependency> + <groupId>org.glyptodon.guacamole</groupId> + <artifactId>guacamole-common</artifactId> + <version>0.9.9</version> + <scope>compile</scope> + </dependency> + + <!-- Guacamole JavaScript library --> + <dependency> + <groupId>org.glyptodon.guacamole</groupId> + <artifactId>guacamole-common-js</artifactId> + <version>0.9.9</version> + <type>zip</type> + <scope>runtime</scope> + </dependency> + + </dependencies> + +</project> http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/92f04899/tutorials/guacamole-tutorial/src/main/java/org/glyptodon/guacamole/net/example/TutorialGuacamoleTunnelServlet.java ---------------------------------------------------------------------- diff --git a/tutorials/guacamole-tutorial/src/main/java/org/glyptodon/guacamole/net/example/TutorialGuacamoleTunnelServlet.java b/tutorials/guacamole-tutorial/src/main/java/org/glyptodon/guacamole/net/example/TutorialGuacamoleTunnelServlet.java new file mode 100644 index 0000000..1a2e958 --- /dev/null +++ b/tutorials/guacamole-tutorial/src/main/java/org/glyptodon/guacamole/net/example/TutorialGuacamoleTunnelServlet.java @@ -0,0 +1,38 @@ +package org.glyptodon.guacamole.net.example; + +import javax.servlet.http.HttpServletRequest; +import org.glyptodon.guacamole.GuacamoleException; +import org.glyptodon.guacamole.net.GuacamoleSocket; +import org.glyptodon.guacamole.net.GuacamoleTunnel; +import org.glyptodon.guacamole.net.InetGuacamoleSocket; +import org.glyptodon.guacamole.net.SimpleGuacamoleTunnel; +import org.glyptodon.guacamole.protocol.ConfiguredGuacamoleSocket; +import org.glyptodon.guacamole.protocol.GuacamoleConfiguration; +import org.glyptodon.guacamole.servlet.GuacamoleHTTPTunnelServlet; + +public class TutorialGuacamoleTunnelServlet + extends GuacamoleHTTPTunnelServlet { + + @Override + protected GuacamoleTunnel doConnect(HttpServletRequest request) + throws GuacamoleException { + + // Create our configuration + GuacamoleConfiguration config = new GuacamoleConfiguration(); + config.setProtocol("vnc"); + config.setParameter("hostname", "localhost"); + config.setParameter("port", "5901"); + config.setParameter("password", "potato"); + + // Connect to guacd - everything is hard-coded here. + GuacamoleSocket socket = new ConfiguredGuacamoleSocket( + new InetGuacamoleSocket("localhost", 4822), + config + ); + + // Return a new tunnel which uses the connected socket + return new SimpleGuacamoleTunnel(socket); + + } + +} http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/92f04899/tutorials/guacamole-tutorial/src/main/webapp/WEB-INF/web.xml ---------------------------------------------------------------------- diff --git a/tutorials/guacamole-tutorial/src/main/webapp/WEB-INF/web.xml b/tutorials/guacamole-tutorial/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..064e95e --- /dev/null +++ b/tutorials/guacamole-tutorial/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<web-app version="2.5" + xmlns="http://java.sun.com/xml/ns/javaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee + http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> + + <!-- Basic config --> + <welcome-file-list> + <welcome-file>index.html</welcome-file> + </welcome-file-list> + + <!-- Guacamole Tunnel Servlet --> + <servlet> + <description>Tunnel servlet.</description> + <servlet-name>Tunnel</servlet-name> + <servlet-class> + org.glyptodon.guacamole.net.example.TutorialGuacamoleTunnelServlet + </servlet-class> + </servlet> + + <servlet-mapping> + <servlet-name>Tunnel</servlet-name> + <url-pattern>/tunnel</url-pattern> + </servlet-mapping> + +</web-app> http://git-wip-us.apache.org/repos/asf/incubator-guacamole-manual/blob/92f04899/tutorials/guacamole-tutorial/src/main/webapp/index.html ---------------------------------------------------------------------- diff --git a/tutorials/guacamole-tutorial/src/main/webapp/index.html b/tutorials/guacamole-tutorial/src/main/webapp/index.html new file mode 100644 index 0000000..15018a2 --- /dev/null +++ b/tutorials/guacamole-tutorial/src/main/webapp/index.html @@ -0,0 +1,68 @@ +<!DOCTYPE HTML> +<html> + + <head> + <title>Guacamole Tutorial</title> + </head> + + <body> + + <!-- Guacamole --> + <script type="text/javascript" + src="guacamole-common-js/all.min.js"></script> + + <!-- Display --> + <div id="display"></div> + + <!-- Init --> + <script type="text/javascript"> /* <![CDATA[ */ + + // Get display div from document + var display = document.getElementById("display"); + + // Instantiate client, using an HTTP tunnel for communications. + var guac = new Guacamole.Client( + new Guacamole.HTTPTunnel("tunnel") + ); + + // Add client to display div + display.appendChild(guac.getDisplay().getElement()); + + // Error handler + guac.onerror = function(error) { + alert(error); + }; + + // Connect + guac.connect(); + + // Disconnect on close + window.onunload = function() { + guac.disconnect(); + } + + // Mouse + var mouse = new Guacamole.Mouse(guac.getDisplay().getElement()); + + mouse.onmousedown = + mouse.onmouseup = + mouse.onmousemove = function(mouseState) { + guac.sendMouseState(mouseState); + }; + + // Keyboard + var keyboard = new Guacamole.Keyboard(document); + + keyboard.onkeydown = function (keysym) { + guac.sendKeyEvent(1, keysym); + }; + + keyboard.onkeyup = function (keysym) { + guac.sendKeyEvent(0, keysym); + }; + + /* ]]> */ </script> + + </body> + +</html>
