You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2020/05/01 09:41:53 UTC
[openmeetings] branch master updated: [OPENMEETINGS-2301] code is
improved, issue still reproducible
This is an automated email from the ASF dual-hosted git repository.
solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push:
new e7d4bd0 [OPENMEETINGS-2301] code is improved, issue still reproducible
e7d4bd0 is described below
commit e7d4bd09b0208fad456ee4c9e197cda07f02aacb
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Fri May 1 16:41:39 2020 +0700
[OPENMEETINGS-2301] code is improved, issue still reproducible
---
.../apache/openmeetings/web/app/ClientManager.java | 76 +++++++++++-----------
.../apache/openmeetings/web/common/MainPanel.java | 1 +
.../openmeetings/web/common/OmWebSocketPanel.java | 3 -
3 files changed, 40 insertions(+), 40 deletions(-)
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/ClientManager.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/ClientManager.java
index 870d31d..7806af1 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/ClientManager.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/ClientManager.java
@@ -165,9 +165,39 @@ public class ClientManager implements IClientManager {
}
public void exitRoom(Client c) {
+ exitRoom(c, true);
+ }
+
+ public void exitRoom(Client c, boolean update) {
Long roomId = c.getRoomId();
- removeFromRoom(c);
+ log.debug("Removing online room client: {}, room: {}", c.getUid(), roomId);
if (roomId != null) {
+ IMap<Long, Set<String>> rooms = rooms();
+ rooms.lock(roomId);
+ Set<String> clients = rooms.get(roomId);
+ if (clients != null) {
+ clients.remove(c.getUid());
+ rooms.put(roomId, clients);
+ onlineRooms.put(roomId, clients);
+ }
+ rooms.unlock(roomId);
+ if (clients == null || clients.isEmpty()) {
+ String serverId = c.getServerId();
+ IMap<String, ServerInfo> servers = servers();
+ servers.lock(serverId);
+ ServerInfo si = servers.get(serverId);
+ si.remove(c.getRoom());
+ servers.put(serverId, si);
+ onlineServers.put(serverId, si);
+ servers.unlock(serverId);
+ }
+ kHandler.leaveRoom(c);
+ c.setRoom(null);
+ c.clear();
+ if (update) {
+ update(c);
+ }
+
sendRoom(new TextRoomMessage(roomId, c, RoomMessage.Type.ROOM_EXIT, c.getUid()));
confLogDao.add(
ConferenceLog.Type.ROOM_LEAVE
@@ -185,7 +215,7 @@ public class ClientManager implements IClientManager {
, c.getUserId(), "0", null
, c.getRemoteAddress()
, "");
- exitRoom(c);
+ exitRoom(c, false);
kHandler.remove(c);
log.debug("Removing online client: {}, roomId: {}", c.getUid(), c.getRoomId());
map().remove(c.getUid());
@@ -258,37 +288,6 @@ public class ClientManager implements IClientManager {
}
}
- public Client removeFromRoom(Client c) {
- Long roomId = c.getRoomId();
- log.debug("Removing online room client: {}, room: {}", c.getUid(), roomId);
- if (roomId != null) {
- IMap<Long, Set<String>> rooms = rooms();
- rooms.lock(roomId);
- Set<String> clients = rooms.get(roomId);
- if (clients != null) {
- clients.remove(c.getUid());
- rooms.put(roomId, clients);
- onlineRooms.put(roomId, clients);
- }
- rooms.unlock(roomId);
- if (clients == null || clients.isEmpty()) {
- String serverId = c.getServerId();
- IMap<String, ServerInfo> servers = servers();
- servers.lock(serverId);
- ServerInfo si = servers.get(serverId);
- si.remove(c.getRoom());
- servers.put(serverId, si);
- onlineServers.put(serverId, si);
- servers.unlock(serverId);
- }
- kHandler.leaveRoom(c);
- c.setRoom(null);
- c.clear();
- update(c);
- }
- return c;
- }
-
public boolean isOnline(Long userId) {
boolean isUserOnline = false;
for (Map.Entry<String, Client> e : map().entrySet()) {
@@ -412,12 +411,15 @@ public class ClientManager implements IClientManager {
, EntryUpdatedListener<String, Client>
, EntryRemovedListener<String, Client>
{
- private void process(EntryEvent<String, Client> event) {
+ private void process(EntryEvent<String, Client> event, boolean shouldAdd) {
+ if (event.getMember().localMember()) {
+ return;
+ }
final String uid = event.getKey();
synchronized (onlineClients) {
if (onlineClients.containsKey(uid)) {
onlineClients.get(uid).merge(event.getValue());
- } else {
+ } else if (shouldAdd) {
onlineClients.put(uid, event.getValue());
}
}
@@ -425,12 +427,12 @@ public class ClientManager implements IClientManager {
@Override
public void entryAdded(EntryEvent<String, Client> event) {
- process(event);
+ process(event, true);
}
@Override
public void entryUpdated(EntryEvent<String, Client> event) {
- process(event);
+ process(event, false);
}
@Override
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
index dcb46bd..cd0b90b 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/MainPanel.java
@@ -175,6 +175,7 @@ public class MainPanel extends Panel {
@Override
protected void closeHandler(AbstractClientMessage msg) {
+ log.debug("WebSocketBehavior::closeHandler uid - {}", uid);
super.closeHandler(msg);
if (uid != null) {
cm.exit(getClient());
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
index f5fdfa5..3029726 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java
@@ -148,19 +148,16 @@ public abstract class OmWebSocketPanel extends Panel {
@Override
protected void onAbort(AbortedMessage msg) {
- super.onAbort(msg);
closeHandler(msg);
}
@Override
protected void onClose(ClosedMessage msg) {
- super.onClose(msg);
closeHandler(msg);
}
@Override
protected void onError(WebSocketRequestHandler handler, ErrorMessage msg) {
- super.onError(handler, msg);
closeHandler(msg);
}
};