Skip to content

Commit

Permalink
eclipse-glsp#109 Remove the UUID requirement / ApplicationID (eclipse…
Browse files Browse the repository at this point in the history
…-glsp#76)

* eclipse-glsp#109 Remove the UUID requirement / ApplicationID

- Remove the clientId to GLSPClient mapping in ClientSessionManager

fixes eclipse-glsp/glsp/issues/109

Signed-off-by: Camille Letavernier <[email protected]>

* eclipse-glsp#109 Remove unnecessary computeIfAbsent

Signed-off-by: Camille Letavernier <[email protected]>
  • Loading branch information
CamilleLetavernier authored Aug 28, 2020
1 parent 0a15627 commit d598a99
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,18 @@
********************************************************************************/
package org.eclipse.glsp.api.protocol;

import java.util.Optional;

public interface ClientSessionManager {

boolean connectClient(GLSPClient client);

boolean createClientSession(GLSPClient glspClient, String clientId);

boolean disposeClientSession(String clientId);
boolean disposeClientSession(GLSPClient client, String clientId);

boolean disconnectClient(GLSPClient client);

boolean addListener(ClientSessionListener listener);

boolean removeListener(ClientSessionListener listener);

Optional<GLSPClient> resolve(String clientId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,22 @@
import org.eclipse.glsp.api.action.kind.DisposeClientSessionAction;
import org.eclipse.glsp.api.model.GraphicalModelState;
import org.eclipse.glsp.api.protocol.ClientSessionManager;
import org.eclipse.glsp.api.protocol.GLSPClient;

import com.google.inject.Inject;
import com.google.inject.Provider;

public class DisposeClientSessionActionHandler extends BasicActionHandler<DisposeClientSessionAction> {

@Inject()
@Inject
protected ClientSessionManager sessionManager;

@Inject
protected Provider<GLSPClient> client;

@Override
protected List<Action> executeAction(final DisposeClientSessionAction action, final GraphicalModelState modelState) {
sessionManager.disposeClientSession(action.getClientId());
sessionManager.disposeClientSession(client.get(), action.getClientId());
return none();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,32 +16,29 @@
package org.eclipse.glsp.server.jsonrpc;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

import org.eclipse.glsp.api.protocol.ClientSessionListener;
import org.eclipse.glsp.api.protocol.ClientSessionManager;
import org.eclipse.glsp.api.protocol.GLSPClient;

public final class DefaultClientSessionManager implements ClientSessionManager {

private final Set<GLSPClient> clients = new HashSet<>();
private final Set<ClientSessionListener> listeners = new LinkedHashSet<>();
private final Map<String, GLSPClient> clientSessions = new HashMap<>();
private final Map<GLSPClient, Set<String>> clientSessions = new HashMap<>();

public static final DefaultClientSessionManager INSTANCE = new DefaultClientSessionManager();

private DefaultClientSessionManager() {}

@Override
public synchronized boolean connectClient(final GLSPClient client) {
boolean success = clients.add(client);
boolean success = clientSessions.putIfAbsent(client, new HashSet<>()) == null;
if (success) {
new ArrayList<>(this.listeners).forEach(listener -> listener.clientConnected(client));
}
Expand All @@ -51,17 +48,17 @@ public synchronized boolean connectClient(final GLSPClient client) {
@Override
public synchronized boolean createClientSession(final GLSPClient client, final String clientId) {
connectClient(client);
boolean success = clientSessions.putIfAbsent(clientId, client) == null;
boolean success = clientSessions.get(client).add(clientId);
if (success) {
new ArrayList<>(this.listeners).forEach(listener -> listener.sessionCreated(clientId, client));
}
return success;
}

@Override
public synchronized boolean disposeClientSession(final String clientId) {
GLSPClient client = clientSessions.remove(clientId);
if (client != null) {
public synchronized boolean disposeClientSession(final GLSPClient client, final String clientId) {
boolean success = clientSessions.getOrDefault(client, Collections.emptySet()).remove(clientId);
if (success) {
new ArrayList<>(this.listeners).forEach(listener -> listener.sessionClosed(clientId, client));
return true;
}
Expand All @@ -70,14 +67,10 @@ public synchronized boolean disposeClientSession(final String clientId) {

@Override
public synchronized boolean disconnectClient(final GLSPClient client) {
if (clients.contains(client)) {
List<String> sessionsToDisconnect = clientSessions.entrySet().stream()
.filter(entry -> entry.getValue().equals(client))
.map(Map.Entry::getKey)
.collect(Collectors.toList());

sessionsToDisconnect.forEach(this::disposeClientSession);
this.clients.remove(client);
if (clientSessions.containsKey(client)) {
Set<String> sessionsToDisconnect = clientSessions.getOrDefault(client, Collections.emptySet());
sessionsToDisconnect.forEach(clientId -> this.disposeClientSession(client, clientId));
this.clientSessions.remove(client);
new ArrayList<>(this.listeners).forEach(listener -> listener.clientDisconnected(client));
return true;
}
Expand All @@ -94,9 +87,4 @@ public boolean removeListener(final ClientSessionListener listener) {
return listeners.remove(listener);
}

@Override
public Optional<GLSPClient> resolve(final String clientId) {
return Optional.ofNullable(clientSessions.get(clientId));
}

}

0 comments on commit d598a99

Please sign in to comment.