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);
 			}
 		};