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 <solomax...@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);
                        }
                };

Reply via email to