Skip to content

Commit

Permalink
BREAKING CHANGE: revise service calls (#1077)
Browse files Browse the repository at this point in the history
  • Loading branch information
jri committed May 16, 2017
1 parent 01ba232 commit 55b8655
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 27 deletions.
55 changes: 33 additions & 22 deletions src/main/java/de/deepamehta/websockets/WebSocketsPlugin.java
Expand Up @@ -66,34 +66,18 @@ public void dispatch(EventListener listener, Object... params) {
// *** WebSocketsService ***

@Override
public void sendMessage(String pluginUri, String message) {
if (request == null) {
throw new RuntimeException("No request is injected");
}
HttpSession session = request.getSession(false);
if (session == null) {
throw new RuntimeException("No valid session is associated with this request");
}
pool.getConnection(pluginUri, session.getId()).sendMessage(message);
public void messageToAll(String pluginUri, String message) {
broadcast(pluginUri, message, null); // exclude=null
}

// ---

@Override
public void broadcast(String pluginUri, String message) {
broadcast(pluginUri, message, null); // exclude=null
public void messageToAllButOne(String pluginUri, String message) {
broadcast(pluginUri, message, getConnection(pluginUri));
}

@Override
public void broadcast(String pluginUri, String message, WebSocketConnection exclude) {
Collection<WebSocketConnection> connections = pool.getConnections(pluginUri);
if (connections != null) {
for (WebSocketConnection connection : connections) {
if (connection != exclude) {
connection.sendMessage(message);
}
}
}
public void messageToOne(String pluginUri, String message) {
getConnection(pluginUri).sendMessage(message);
}

// *** REST Resource (not part of OSGi service) ***
Expand Down Expand Up @@ -141,6 +125,33 @@ public void shutdown() {
}
}

// ------------------------------------------------------------------------------------------------- Private Methods

/**
* Returns the WebSocket connection that is associated to the current request, based on the request's session ID.
*/
private WebSocketConnection getConnection(String pluginUri) {
if (request == null) {
throw new RuntimeException("No request is injected");
}
HttpSession session = request.getSession(false);
if (session == null) {
throw new RuntimeException("No valid session is associated with this request");
}
return pool.getConnection(pluginUri, session.getId());
}

private void broadcast(String pluginUri, String message, WebSocketConnection exclude) {
Collection<WebSocketConnection> connections = pool.getConnections(pluginUri);
if (connections != null) {
for (WebSocketConnection connection : connections) {
if (connection != exclude) {
connection.sendMessage(message);
}
}
}
}

// ------------------------------------------------------------------------------------------------- Private Classes

private class WebSocketsServer extends Server {
Expand Down
8 changes: 3 additions & 5 deletions src/main/java/de/deepamehta/websockets/WebSocketsService.java
Expand Up @@ -4,11 +4,9 @@

public interface WebSocketsService {

void sendMessage(String pluginUri, String message);
void messageToAll(String pluginUri, String message);

// ---
void messageToAllButOne(String pluginUri, String message);

void broadcast(String pluginUri, String message);

void broadcast(String pluginUri, String message, WebSocketConnection exclude);
void messageToOne(String pluginUri, String message);
}

0 comments on commit 55b8655

Please sign in to comment.