Skip to content
This repository has been archived by the owner on Jan 29, 2021. It is now read-only.

Support websockets messaging module #11

Merged
merged 3 commits into from
Sep 9, 2016
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.parent</artifactId>
<version>4.0.1-SNAPSHOT</version>
<version>5.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
Expand Down
4 changes: 1 addition & 3 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.parent</artifactId>
<version>4.0.1-SNAPSHOT</version>
<version>5.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
Expand Down Expand Up @@ -35,8 +35,6 @@
<dependency>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.api</artifactId>
<version>4.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
12 changes: 1 addition & 11 deletions msg.push/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.parent</artifactId>
<version>4.0.1-SNAPSHOT</version>
<version>5.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
Expand Down Expand Up @@ -40,32 +40,22 @@
<dependency>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.core</artifactId>
<version>4.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.adobe.aem</groupId>
Expand Down
5 changes: 1 addition & 4 deletions msg.replication/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.parent</artifactId>
<version>4.0.1-SNAPSHOT</version>
<version>5.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
Expand Down Expand Up @@ -43,14 +43,11 @@
<dependency>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.core</artifactId>
<version>4.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<!-- jcr -->
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
<version>2.0</version>
</dependency>
<!-- aem -->
<dependency>
Expand Down
29 changes: 16 additions & 13 deletions msg.websocket/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.parent</artifactId>
<version>4.0.1-SNAPSHOT</version>
<version>5.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
Expand Down Expand Up @@ -41,49 +41,52 @@
<dependency>
<groupId>com.cognifide.cq.actions</groupId>
<artifactId>com.cognifide.cq.actions.core</artifactId>
<version>4.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>

<!-- gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>

<!-- websocket server -->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.2.14.v20151106</version>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-client</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-api</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-common</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-websocket</artifactId>
<version>8.1.14.v20131031</version>
<artifactId>jetty-server</artifactId>
</dependency>

<!-- websocket client -->
<dependency>
<groupId>org.glassfish.tyrus.bundles</groupId>
<artifactId>tyrus-standalone-client-jdk</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.glassfish.tyrus</groupId>
<artifactId>tyrus-container-grizzly-client</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http</artifactId>
<version>2.3.19</version>
</dependency>
<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-framework</artifactId>
<version>2.3.19</version>
</dependency>

<!-- aem -->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.eclipse.jetty.websocket.WebSocket;

import com.cognifide.actions.msg.websocket.api.SocketSender;

Expand All @@ -42,8 +41,8 @@ public MessageSocket createSocket() {
}

@Override
public void socketClosed(WebSocket websocket) {
sockets.remove(websocket);
public void socketClosed(MessageSocket messageSocket) {
sockets.remove(messageSocket);
}

public boolean sendMessage(String message) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,51 +23,40 @@
import java.io.IOException;
import java.util.concurrent.atomic.AtomicBoolean;

import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocket.OnTextMessage;
import org.eclipse.jetty.websocket.api.RemoteEndpoint;
import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MessageSocket implements WebSocket, OnTextMessage {
@WebSocket
public class MessageSocket {

private static final Logger LOG = LoggerFactory.getLogger(MessageSocket.class);

private final SocketClosedListener listener;

private final AtomicBoolean confirmed = new AtomicBoolean(false);

private Connection connection;
private Session session;

public MessageSocket(SocketClosedListener listener) {
this.listener = listener;
}

@Override
public void onOpen(Connection connection) {
LOG.info("Socket opened");
this.connection = connection;
}

@Override
public void onClose(int closeCode, String msg) {
LOG.info("Socket closed");
listener.socketClosed(this);
}

@Override
public synchronized void onMessage(String msg) {
LOG.debug("Incoming message " + msg);
confirmed.set(true);
notifyAll();
}

public synchronized boolean sendMessage(String msg) {
confirmed.set(false);
if (connection == null) {
if (session == null) {
return false;
}
try {
connection.sendMessage(msg);
RemoteEndpoint remote = session.getRemote();
remote.sendString(msg);
remote.flush();
wait(5000);
return confirmed.getAndSet(false);
} catch (InterruptedException | IOException e) {
Expand All @@ -76,4 +65,27 @@ public synchronized boolean sendMessage(String msg) {
}
}

@OnWebSocketClose
public void onWebSocketClose(int i, String s) {
LOG.info("Socket closed");
listener.socketClosed(this);
}

@OnWebSocketConnect
public void onWebSocketConnect(Session session) {
LOG.info("Socket opened");
this.session = session;
}

@OnWebSocketError
public void onWebSocketError(Throwable e) {
LOG.debug("Socket Error occured", e);
}

@OnWebSocketMessage
public synchronized void OnWebSocketMessage(String msg) {
LOG.debug("Incoming message " + msg);
confirmed.set(true);
notifyAll();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.felix.scr.annotations.Activate;
Expand All @@ -33,12 +32,15 @@
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.settings.SlingSettingsService;
import org.eclipse.jetty.websocket.WebSocket;
import org.eclipse.jetty.websocket.WebSocketFactory;
import org.eclipse.jetty.websocket.WebSocketFactory.Acceptor;
import org.eclipse.jetty.websocket.api.WebSocketBehavior;
import org.eclipse.jetty.websocket.api.WebSocketPolicy;
import org.eclipse.jetty.websocket.server.WebSocketServerFactory;
import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest;
import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse;
import org.eclipse.jetty.websocket.servlet.WebSocketCreator;

@SlingServlet(paths = MessageWebsocketServlet.PATH, methods = "GET")
public class MessageWebsocketServlet extends SlingSafeMethodsServlet implements Acceptor {
public class MessageWebsocketServlet extends SlingSafeMethodsServlet implements WebSocketCreator {

private static final long serialVersionUID = -3631947705678810095L;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to change serialVersionUID after the class was changed.


Expand All @@ -50,16 +52,21 @@ public class MessageWebsocketServlet extends SlingSafeMethodsServlet implements
@Reference
private SlingSettingsService slingSettings;

private WebSocketFactory webSocketFactory;
private WebSocketServerFactory webSocketFactory;

@Override
public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
public MessageSocket createWebSocket(ServletUpgradeRequest servletUpgradeRequest,
ServletUpgradeResponse servletUpgradeResponse) {
return sockets.createSocket();
}

@Activate
public void activate() throws Exception {
webSocketFactory = new WebSocketFactory(this, 8192);
WebSocketBehavior behavior = WebSocketBehavior.SERVER;
WebSocketPolicy policy = new WebSocketPolicy(behavior);
webSocketFactory = new WebSocketServerFactory(policy);
webSocketFactory.register(MessageSocket.class);
webSocketFactory.setCreator(this);
webSocketFactory.start();
}

Expand All @@ -78,11 +85,6 @@ public void doGet(SlingHttpServletRequest slingRequest, SlingHttpServletResponse
webSocketFactory.acceptWebSocket(slingRequest, wrappedResponse);
}

@Override
public boolean checkOrigin(HttpServletRequest paramHttpServletRequest, String paramString) {
return true;
}

private boolean isPublish() {
return slingSettings.getRunModes().contains("publish");
}
Expand All @@ -101,5 +103,4 @@ private boolean authenticate(SlingHttpServletRequest request, SlingHttpServletRe
return true;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@

package com.cognifide.actions.msg.websocket.servlet;

import org.eclipse.jetty.websocket.WebSocket;

public interface SocketClosedListener {
void socketClosed(WebSocket websocket);
void socketClosed(MessageSocket socket);
}
Loading