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 2017/02/17 11:42:07 UTC
svn commit: r1783376 - in /openmeetings/application:
branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/
branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/
branches/3.2.x/openmeeting...
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());