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