From da713fe33d196b4514a21bc0b1c0b059c31f3d4e Mon Sep 17 00:00:00 2001 From: Bartosz Firyn Date: Sat, 12 Sep 2015 14:01:41 +0200 Subject: [PATCH] Small enhancements in WebSocket example, refs #390 --- .../src/main/html/style.css | 7 ++++++- .../webcam-capture-websockets/src/main/html/ws.js | 8 +++++++- .../src/main/java/WebcamCache.java | 13 ++++++++++++- .../src/main/java/WebcamWebSocketHandler.java | 10 ++++++---- .../src/main/java/WebcamWebSocketsExample.java | 11 +++++++---- 5 files changed, 38 insertions(+), 11 deletions(-) diff --git a/webcam-capture-examples/webcam-capture-websockets/src/main/html/style.css b/webcam-capture-examples/webcam-capture-websockets/src/main/html/style.css index d97e2ba6..e493baad 100644 --- a/webcam-capture-examples/webcam-capture-websockets/src/main/html/style.css +++ b/webcam-capture-examples/webcam-capture-websockets/src/main/html/style.css @@ -1,4 +1,3 @@ - .wrapper { margin-left: auto; margin-right: auto; @@ -6,6 +5,11 @@ text-align: center; } +.shadow { + border: 1px solid #f00; + transition: all .5s ease-in; +} + img { margin-left: 8px; margin-bottom: 8px; @@ -13,4 +17,5 @@ img { height: 198px; box-shadow: 0 0 16px #444; border: 1px solid #fff; + transition: all 1s ease-in; } diff --git a/webcam-capture-examples/webcam-capture-websockets/src/main/html/ws.js b/webcam-capture-examples/webcam-capture-websockets/src/main/html/ws.js index 69551e5a..60062a26 100644 --- a/webcam-capture-examples/webcam-capture-websockets/src/main/html/ws.js +++ b/webcam-capture-examples/webcam-capture-websockets/src/main/html/ws.js @@ -29,9 +29,15 @@ $(document).ready(function() { $webcams.append($img) } } else if (type === 'image') { - $("img[name='" + data.webcam + "']") + var $img = $("img[name='" + data.webcam + "']") .attr("src", "data:image/jpeg;base64," + data.image) + .addClass('shadow') .trigger("change"); + setTimeout(function() { + $img + .removeClass('shadow') + .trigger("change"); + }, 1000); } }; diff --git a/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamCache.java b/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamCache.java index 0c0e6883..0858679a 100644 --- a/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamCache.java +++ b/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamCache.java @@ -4,6 +4,9 @@ import java.util.List; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.github.sarxos.webcam.Webcam; import com.github.sarxos.webcam.WebcamEvent; import com.github.sarxos.webcam.WebcamListener; @@ -12,6 +15,8 @@ public class WebcamCache implements WebcamUpdater.DelayCalculator, WebcamListener { + private static final Logger LOG = LoggerFactory.getLogger(WebcamCache.class); + /** * How often images are updated on Dasding server. */ @@ -46,7 +51,13 @@ public long calculateDelay(long snapshotDuration, double deviceFps) { } public static BufferedImage getImage(String name) { - return CACHE.webcams.get(name).getImage(); + Webcam webcam = CACHE.webcams.get(name); + try { + return webcam.getImage(); + } catch (Exception e) { + LOG.error("Exception when getting image from webcam", e); + } + return null; } public static List getWebcamNames() { diff --git a/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketHandler.java b/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketHandler.java index cf88c9d5..44fa60bb 100644 --- a/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketHandler.java +++ b/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketHandler.java @@ -103,10 +103,12 @@ public void newImage(Webcam webcam, BufferedImage image) { } private void send(String message) { - try { - session.getRemote().sendString(message); - } catch (IOException e) { - LOG.error("Exception when sending string", e); + if (session.isOpen()) { + try { + session.getRemote().sendStringByFuture(message); + } catch (Exception e) { + LOG.error("Exception when sending string", e); + } } } diff --git a/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketsExample.java b/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketsExample.java index 30ecd6e7..a6de84c8 100644 --- a/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketsExample.java +++ b/webcam-capture-examples/webcam-capture-websockets/src/main/java/WebcamWebSocketsExample.java @@ -1,6 +1,8 @@ import org.eclipse.jetty.server.Server; import org.eclipse.jetty.websocket.server.WebSocketHandler; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.github.sarxos.webcam.Webcam; import com.github.sarxos.webcam.ds.ipcam.IpCamDriver; @@ -8,9 +10,8 @@ /** - * This example demonstrates how webcam capture IP camera driver can be used - * with conjunction with websockets to feed data to the web application - * frontend. + * This example demonstrates how webcam capture IP camera driver can be used with conjunction with + * websockets to feed data to the web application frontend. * * @author Bartosz Firyn (sarxos) */ @@ -20,10 +21,12 @@ public class WebcamWebSocketsExample { Webcam.setDriver(new IpCamDriver(new IpCamStorage("src/main/resources/cameras.xml"))); } + private static final Logger LOG = LoggerFactory.getLogger(WebcamWebSocketsExample.class); + public static void main(String[] args) throws Exception { for (String name : WebcamCache.getWebcamNames()) { - System.out.println("Will read webcam " + name); + LOG.info("Will read webcam {}", name); } Server server = new Server(8123);