Author: solomax
Date: Fri Feb 17 11:42:07 2017
New Revision: 1783376

URL: http://svn.apache.org/viewvc?rev=1783376&view=rev
Log:
[OPENMEETINGS-1553] seems to be fixed

Modified:
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java?rev=1783376&r1=1783375&r2=1783376&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
 Fri Feb 17 11:42:07 2017
@@ -40,6 +40,7 @@ import java.util.UUID;
 import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.openmeetings.core.remote.LanguageService.Language;
 import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import 
org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter.MessageSender;
 import org.apache.openmeetings.core.remote.util.SessionVariablesUtil;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ChatDao;
@@ -368,10 +369,31 @@ public class MobileService {
                m.setNeedModeration(r.isChatModerated() && !isModerator(c));
                chatDao.update(m);
                FastDateFormat fmt = getFmt(u);
-               scopeAdapter.sendMessageWithClient(Arrays.asList("chat", 
encodeChatMessage(m, fmt)));
+               sendChatMessage(c, m, fmt);
                WebSocketHelper.sendRoom(m, 
WebSocketHelper.getMessage(u.getId(), Arrays.asList(m), fmt, null));
        }
 
+       public void sendChatMessage(String uid, ChatMessage m, FastDateFormat 
fmt) {
+               sendChatMessage(sessionManager.getClientByPublicSID(uid, null), 
m, fmt);
+       }
+
+       public void sendChatMessage(Client c, ChatMessage m, FastDateFormat 
fmt) {
+               HashMap<String, Object> hsm = new HashMap<String, Object>();
+               hsm.put("client", c);
+               hsm.put("message", Arrays.asList("chat", encodeChatMessage(m, 
fmt)));
+
+               final Long roomId = c.getRoomId();
+               //Sync to all users of current scope
+               new MessageSender(scopeAdapter.getRoomScope("" + roomId), 
"sendVarsToMessageWithClient", hsm, scopeAdapter) {
+                       @Override
+                       public boolean filter(IConnection conn) {
+                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+                               return rcl.isScreenClient()
+                                               || rcl.getRoomId() == null || 
!rcl.getRoomId().equals(roomId);
+                       }
+               }.start();
+       }
+
        private static boolean isModerator(Client c) {
                return c.getIsMod() || c.getIsSuperModerator();
        }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1783376&r1=1783375&r2=1783376&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Fri Feb 17 11:42:07 2017
@@ -171,7 +171,7 @@ public class ScopeApplicationAdapter ext
 
                IServiceCapableConnection service = (IServiceCapableConnection) 
conn;
                String streamId = conn.getClient().getId();
-               
+
                log.debug("### Client connected to OpenMeetings, register 
Client StreamId: " + streamId + " scope " + conn.getScope().getName());
 
                // Set StreamId in Client
@@ -705,7 +705,7 @@ public class ScopeApplicationAdapter ext
 
                        // Notify all users of the same Scope
                        // We need to iterate through the streams to catch if 
anybody is recording
-                       new MessageSender(current, "newStream", 
clientObjectSendToSync) {
+                       new MessageSender(current, "newStream", 
clientObjectSendToSync, this) {
                                @Override
                                public boolean filter(IConnection conn) {
                                        Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
@@ -1198,7 +1198,7 @@ public class ScopeApplicationAdapter ext
 
                        IScope scope = getRoomScope(roomId.toString());
 
-                       new MessageSender(scope, "newMessageByRoomAndDomain", 
message) {
+                       new MessageSender(scope, "newMessageByRoomAndDomain", 
message, this) {
                                @Override
                                public boolean filter(IConnection conn) {
                                        IClient client = conn.getClient();
@@ -1489,7 +1489,7 @@ public class ScopeApplicationAdapter ext
        }
 
        public void sendToScope(final Long roomId, String method, Object obj) {
-               new MessageSender(getRoomScope("" + roomId), method, obj) {
+               new MessageSender(getRoomScope("" + roomId), method, obj, this) 
{
                        @Override
                        public boolean filter(IConnection conn) {
                                Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
@@ -1529,7 +1529,7 @@ public class ScopeApplicationAdapter ext
         * @param sendScreen send to the current client as well
         */
        public void sendMessageToCurrentScope(final String remoteMethodName, 
final Object newMessage, final boolean sendSelf, final boolean sendScreen) {
-               new MessageSender(remoteMethodName, newMessage) {
+               new MessageSender(remoteMethodName, newMessage, this) {
                        @Override
                        public boolean filter(IConnection conn) {
                                IClient client = conn.getClient();
@@ -1539,29 +1539,31 @@ public class ScopeApplicationAdapter ext
                }.start();
        }
 
-       public abstract class MessageSender extends Thread {
+       public static abstract class MessageSender extends Thread {
                final IScope scope;
                final IConnection current;
                final String remoteMethodName;
                final Object newMessage;
+               final IPendingServiceCallback callback;
 
-               public MessageSender(final String remoteMethodName, final 
Object newMessage) {
-                       this((IScope)null, remoteMethodName, newMessage);
+               public MessageSender(final String remoteMethodName, final 
Object newMessage, IPendingServiceCallback callback) {
+                       this((IScope)null, remoteMethodName, newMessage, 
callback);
                }
 
-               public MessageSender(IScope _scope, String remoteMethodName, 
Object newMessage) {
-                       this(Red5.getConnectionLocal(), _scope, 
remoteMethodName, newMessage);
+               public MessageSender(IScope _scope, String remoteMethodName, 
Object newMessage, IPendingServiceCallback callback) {
+                       this(Red5.getConnectionLocal(), _scope, 
remoteMethodName, newMessage, callback);
                }
 
-               public MessageSender(IConnection current, String 
remoteMethodName, Object newMessage) {
-                       this(current, null, remoteMethodName, newMessage);
+               public MessageSender(IConnection current, String 
remoteMethodName, Object newMessage, IPendingServiceCallback callback) {
+                       this(current, null, remoteMethodName, newMessage, 
callback);
                }
 
-               public MessageSender(IConnection current, IScope _scope, String 
remoteMethodName, Object newMessage) {
+               public MessageSender(IConnection current, IScope _scope, String 
remoteMethodName, Object newMessage, IPendingServiceCallback callback) {
                        this.current = current;
                        scope = _scope == null ? current.getScope() : _scope;
                        this.remoteMethodName = remoteMethodName;
                        this.newMessage = newMessage;
+                       this.callback = callback;
                }
 
                public abstract boolean filter(IConnection conn);
@@ -1582,7 +1584,7 @@ public class ScopeApplicationAdapter ext
                                                        if (filter(conn)) {
                                                                continue;
                                                        }
-                                                       
((IServiceCapableConnection) conn).invoke(remoteMethodName, new Object[] { 
newMessage }, ScopeApplicationAdapter.this);
+                                                       
((IServiceCapableConnection) conn).invoke(remoteMethodName, new Object[] { 
newMessage }, callback);
                                                        count++;
                                                }
                                        }
@@ -1817,7 +1819,7 @@ public class ScopeApplicationAdapter ext
 
        @SuppressWarnings({ "rawtypes" })
        public boolean sendRemoteCursorEvent(final String streamid, Map 
messageObj) {
-               new MessageSender("sendRemoteCursorEvent", messageObj) {
+               new MessageSender("sendRemoteCursorEvent", messageObj, this) {
 
                        @Override
                        public boolean filter(IConnection conn) {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java?rev=1783376&r1=1783375&r2=1783376&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 Fri Feb 17 11:42:07 2017
@@ -43,6 +43,7 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
+import org.apache.openmeetings.core.remote.MobileService;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ChatDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -52,6 +53,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.MainPanel;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.head.CssHeaderItem;
@@ -119,7 +121,7 @@ public class Chat extends Panel {
        public static CharSequence getReinit() {
                StringBuilder sb = new StringBuilder("chatReinit(");
                sb.append('\'').append(ID_ALL).append('\'')
-               .append(',').append('\'').append(ID_ROOM_PREFIX).append('\'');
+                               
.append(',').append('\'').append(ID_ROOM_PREFIX).append('\'');
                return sb.append("); ");
        }
 
@@ -203,6 +205,8 @@ public class Chat extends Panel {
                                                dao.update(m);
                                                JSONObject msg = 
getMessage(Arrays.asList(m));
                                                if (m.getToRoom() != null) {
+                                                       String uid = 
findParent(MainPanel.class).getClient().getUid(); //TODO HACK
+                                                       
getBean(MobileService.class).sendChatMessage(uid, m, getDateFormat()); //let's 
send to mobile users
                                                        
WebSocketHelper.sendRoom(m, msg);
                                                } else if (m.getToUser() != 
null) {
                                                        
WebSocketHelper.sendUser(getUserId(), msg.toString());

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java?rev=1783376&r1=1783375&r2=1783376&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MobileService.java
 Fri Feb 17 11:42:07 2017
@@ -40,6 +40,7 @@ import java.util.UUID;
 
 import org.apache.commons.lang3.time.FastDateFormat;
 import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import 
org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter.MessageSender;
 import org.apache.openmeetings.core.remote.util.SessionVariablesUtil;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ChatDao;
@@ -368,10 +369,31 @@ public class MobileService {
                m.setNeedModeration(r.isChatModerated() && !isModerator(c));
                chatDao.update(m);
                FastDateFormat fmt = getFmt(u);
-               scopeAdapter.sendMessageWithClient(Arrays.asList("chat", 
encodeChatMessage(m, fmt)));
+               sendChatMessage(c, m, fmt);
                WebSocketHelper.sendRoom(m, 
WebSocketHelper.getMessage(u.getId(), Arrays.asList(m), fmt, null));
        }
 
+       public void sendChatMessage(String uid, ChatMessage m, FastDateFormat 
fmt) {
+               sendChatMessage(sessionManager.getClientByPublicSID(uid, null), 
m, fmt);
+       }
+
+       public void sendChatMessage(Client c, ChatMessage m, FastDateFormat 
fmt) {
+               HashMap<String, Object> hsm = new HashMap<String, Object>();
+               hsm.put("client", c);
+               hsm.put("message", Arrays.asList("chat", encodeChatMessage(m, 
fmt)));
+
+               final Long roomId = c.getRoomId();
+               //Sync to all users of current scope
+               new MessageSender(scopeAdapter.getRoomScope("" + roomId), 
"sendVarsToMessageWithClient", hsm, scopeAdapter) {
+                       @Override
+                       public boolean filter(IConnection conn) {
+                               Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
+                               return rcl.isScreenClient()
+                                               || rcl.getRoomId() == null || 
!rcl.getRoomId().equals(roomId);
+                       }
+               }.start();
+       }
+
        private static boolean isModerator(Client c) {
                return c.getIsMod() || c.getIsSuperModerator();
        }

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1783376&r1=1783375&r2=1783376&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Fri Feb 17 11:42:07 2017
@@ -171,7 +171,7 @@ public class ScopeApplicationAdapter ext
 
                IServiceCapableConnection service = (IServiceCapableConnection) 
conn;
                String streamId = conn.getClient().getId();
-               
+
                log.debug("### Client connected to OpenMeetings, register 
Client StreamId: " + streamId + " scope " + conn.getScope().getName());
 
                // Set StreamId in Client
@@ -705,7 +705,7 @@ public class ScopeApplicationAdapter ext
 
                        // Notify all users of the same Scope
                        // We need to iterate through the streams to catch if 
anybody is recording
-                       new MessageSender(current, "newStream", 
clientObjectSendToSync) {
+                       new MessageSender(current, "newStream", 
clientObjectSendToSync, this) {
                                @Override
                                public boolean filter(IConnection conn) {
                                        Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
@@ -1198,7 +1198,7 @@ public class ScopeApplicationAdapter ext
 
                        IScope scope = getRoomScope(roomId.toString());
 
-                       new MessageSender(scope, "newMessageByRoomAndDomain", 
message) {
+                       new MessageSender(scope, "newMessageByRoomAndDomain", 
message, this) {
                                @Override
                                public boolean filter(IConnection conn) {
                                        IClient client = conn.getClient();
@@ -1489,7 +1489,7 @@ public class ScopeApplicationAdapter ext
        }
 
        public void sendToScope(final Long roomId, String method, Object obj) {
-               new MessageSender(getRoomScope("" + roomId), method, obj) {
+               new MessageSender(getRoomScope("" + roomId), method, obj, this) 
{
                        @Override
                        public boolean filter(IConnection conn) {
                                Client rcl = 
sessionManager.getClientByStreamId(conn.getClient().getId(), null);
@@ -1529,7 +1529,7 @@ public class ScopeApplicationAdapter ext
         * @param sendScreen send to the current client as well
         */
        public void sendMessageToCurrentScope(final String remoteMethodName, 
final Object newMessage, final boolean sendSelf, final boolean sendScreen) {
-               new MessageSender(remoteMethodName, newMessage) {
+               new MessageSender(remoteMethodName, newMessage, this) {
                        @Override
                        public boolean filter(IConnection conn) {
                                IClient client = conn.getClient();
@@ -1539,29 +1539,31 @@ public class ScopeApplicationAdapter ext
                }.start();
        }
 
-       public abstract class MessageSender extends Thread {
+       public static abstract class MessageSender extends Thread {
                final IScope scope;
                final IConnection current;
                final String remoteMethodName;
                final Object newMessage;
+               final IPendingServiceCallback callback;
 
-               public MessageSender(final String remoteMethodName, final 
Object newMessage) {
-                       this((IScope)null, remoteMethodName, newMessage);
+               public MessageSender(final String remoteMethodName, final 
Object newMessage, IPendingServiceCallback callback) {
+                       this((IScope)null, remoteMethodName, newMessage, 
callback);
                }
 
-               public MessageSender(IScope _scope, String remoteMethodName, 
Object newMessage) {
-                       this(Red5.getConnectionLocal(), _scope, 
remoteMethodName, newMessage);
+               public MessageSender(IScope _scope, String remoteMethodName, 
Object newMessage, IPendingServiceCallback callback) {
+                       this(Red5.getConnectionLocal(), _scope, 
remoteMethodName, newMessage, callback);
                }
 
-               public MessageSender(IConnection current, String 
remoteMethodName, Object newMessage) {
-                       this(current, null, remoteMethodName, newMessage);
+               public MessageSender(IConnection current, String 
remoteMethodName, Object newMessage, IPendingServiceCallback callback) {
+                       this(current, null, remoteMethodName, newMessage, 
callback);
                }
 
-               public MessageSender(IConnection current, IScope _scope, String 
remoteMethodName, Object newMessage) {
+               public MessageSender(IConnection current, IScope _scope, String 
remoteMethodName, Object newMessage, IPendingServiceCallback callback) {
                        this.current = current;
                        scope = _scope == null ? current.getScope() : _scope;
                        this.remoteMethodName = remoteMethodName;
                        this.newMessage = newMessage;
+                       this.callback = callback;
                }
 
                public abstract boolean filter(IConnection conn);
@@ -1582,7 +1584,7 @@ public class ScopeApplicationAdapter ext
                                                        if (filter(conn)) {
                                                                continue;
                                                        }
-                                                       
((IServiceCapableConnection) conn).invoke(remoteMethodName, new Object[] { 
newMessage }, ScopeApplicationAdapter.this);
+                                                       
((IServiceCapableConnection) conn).invoke(remoteMethodName, new Object[] { 
newMessage }, callback);
                                                        count++;
                                                }
                                        }
@@ -1817,7 +1819,7 @@ public class ScopeApplicationAdapter ext
 
        @SuppressWarnings({ "rawtypes" })
        public boolean sendRemoteCursorEvent(final String streamid, Map 
messageObj) {
-               new MessageSender("sendRemoteCursorEvent", messageObj) {
+               new MessageSender("sendRemoteCursorEvent", messageObj, this) {
 
                        @Override
                        public boolean filter(IConnection conn) {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java?rev=1783376&r1=1783375&r2=1783376&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 Fri Feb 17 11:42:07 2017
@@ -43,6 +43,7 @@ import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
+import org.apache.openmeetings.core.remote.MobileService;
 import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.basic.ChatDao;
 import org.apache.openmeetings.db.dao.room.RoomDao;
@@ -52,6 +53,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
+import org.apache.openmeetings.web.common.MainPanel;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.head.CssHeaderItem;
@@ -119,7 +121,7 @@ public class Chat extends Panel {
        public static CharSequence getReinit() {
                StringBuilder sb = new StringBuilder("chatReinit(");
                sb.append('\'').append(ID_ALL).append('\'')
-               .append(',').append('\'').append(ID_ROOM_PREFIX).append('\'');
+                               
.append(',').append('\'').append(ID_ROOM_PREFIX).append('\'');
                return sb.append("); ");
        }
 
@@ -203,6 +205,8 @@ public class Chat extends Panel {
                                                dao.update(m);
                                                JSONObject msg = 
getMessage(Arrays.asList(m));
                                                if (m.getToRoom() != null) {
+                                                       String uid = 
findParent(MainPanel.class).getClient().getUid(); //TODO HACK
+                                                       
getBean(MobileService.class).sendChatMessage(uid, m, getDateFormat()); //let's 
send to mobile users
                                                        
WebSocketHelper.sendRoom(m, msg);
                                                } else if (m.getToUser() != 
null) {
                                                        
WebSocketHelper.sendUser(getUserId(), msg.toString());


Reply via email to