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 2014/09/11 19:09:38 UTC
svn commit: r1624338 - in
/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web:
pages/MainPage.java room/RoomPanel.html room/RoomPanel.java
room/message/UserEnter.java room/message/UserListMessage.java
Author: solomax
Date: Thu Sep 11 17:09:38 2014
New Revision: 1624338
URL: http://svn.apache.org/r1624338
Log:
[OPENMEETINGS-1085] message-based user list update is implemented
Added:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserListMessage.java
- copied, changed from r1624336, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserEnter.java
Removed:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserEnter.java
Modified:
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1624338&r1=1624337&r2=1624338&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java Thu Sep 11 17:09:38 2014
@@ -45,6 +45,7 @@ import org.apache.openmeetings.web.commo
import org.apache.openmeetings.web.common.menu.MenuItem;
import org.apache.openmeetings.web.common.menu.MenuPanel;
import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.openmeetings.web.room.message.UserListMessage;
import org.apache.openmeetings.web.user.AboutDialog;
import org.apache.openmeetings.web.user.ChatPanel;
import org.apache.openmeetings.web.util.OmUrlFragment;
@@ -146,8 +147,8 @@ public class MainPage extends BaseInited
log.debug(String.format("WebSocketBehavior::onClose [session: %s, key: %s]", message.getSessionId(), message.getKey()));
long roomId = Application.getRoom(_c);
if (roomId > 0) {
- Client c = Application.removeUserFromRoom(roomId, _c);
- RoomPanel.sendRoom(roomId, RoomPanel.removeUser(c));
+ Application.removeUserFromRoom(roomId, _c);
+ RoomPanel.broadcast(roomId, new UserListMessage(_c.getUserId(), roomId, UserListMessage.Type.exit));
}
}
});
Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1624338&r1=1624337&r2=1624338&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html Thu Sep 11 17:09:38 2014
@@ -19,6 +19,13 @@
-->
<html xmlns:wicket="http://wicket.apache.org">
+<wicket:head>
+ <script type="text/javascript">
+ Wicket.Event.subscribe("/websocket/closed", function(jqEvent, msg) {
+ //FIXME add Error dialog should be displayed
+ });
+ </script>
+</wicket:head>
<wicket:panel>
<div wicket:id="roomMenu"></div>
<div class="room menu right">
@@ -33,7 +40,11 @@
<li><a href="#utab"><wicket:ommessage key="613"/></a></li>
<li><a wicket:id="flink" href="#ftab"><wicket:ommessage key="614"/></a></li>
</ul>
- <div id="utab"><div class="user list"></div></div>
+ <div id="utab">
+ <div wicket:id="userList" class="user list">
+ <div wicket:id="user" class="user ui-corner-all ui-widget-content"><span wicket:id="name"></span></div>
+ </div>
+ </div>
<div wicket:id="ftab" id="ftab"><div class="file list" wicket:id="tree"></div></div>
</div>
</div>
Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1624338&r1=1624337&r2=1624338&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java Thu Sep 11 17:09:38 2014
@@ -27,7 +27,7 @@ import static org.apache.openmeetings.we
import static org.apache.openmeetings.web.app.WebSession.getUserId;
import static org.apache.openmeetings.web.util.OmUrlFragment.ROOMS_PUBLIC;
-import java.sql.ClientInfoStatus;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -63,6 +63,8 @@ import org.apache.openmeetings.web.commo
import org.apache.openmeetings.web.common.tree.PublicRecordingTreeProvider;
import org.apache.openmeetings.web.pages.MainPage;
import org.apache.openmeetings.web.room.message.PollCreated;
+import org.apache.openmeetings.web.room.message.RoomMessage;
+import org.apache.openmeetings.web.room.message.UserListMessage;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxEventBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -79,12 +81,16 @@ import org.apache.wicket.markup.head.OnD
import org.apache.wicket.markup.head.PriorityHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.protocol.ws.WebSocketSettings;
+import org.apache.wicket.protocol.ws.api.IWebSocketConnection;
import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
+import org.apache.wicket.protocol.ws.concurrent.Executor;
import org.apache.wicket.request.flow.RedirectToUrlException;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
import org.apache.wicket.request.resource.ResourceReference;
@@ -109,7 +115,6 @@ public class RoomPanel extends BasePanel
@Override
protected void respond(AjaxRequestTarget target) {
- target.appendJavaScript("roomMessage(" + userList(roomId, c) + ");");
target.appendJavaScript("setHeight();");
//TODO SID etc
Room r = getBean(RoomDao.class).get(roomId);
@@ -119,7 +124,7 @@ public class RoomPanel extends BasePanel
, 4L == r.getRoomtype().getRoomtypes_id()
, getStringLabels(448, 449, 450, 451, 758, 447, 52, 53, 1429, 1430, 775, 452, 767, 764, 765, 918, 54, 761, 762).toString()
));
-
+ broadcast(roomId, new UserListMessage(c.getUserId(), roomId, UserListMessage.Type.enter));
}
};
private final InvitationDialog invite;
@@ -133,6 +138,8 @@ public class RoomPanel extends BasePanel
private final RoomMenuItem pollVote;
private final RoomMenuItem pollResult;
private final RoomMenuItem sipDialer;
+ private final WebMarkupContainer userList = new WebMarkupContainer("userList");
+ private final ListView<RoomClient> users;
public RoomPanel(String id, long _roomId) {
this(id, getBean(RoomDao.class).get(_roomId));
@@ -220,6 +227,19 @@ public class RoomPanel extends BasePanel
}
}
}).setVisible(showFiles));
+ add(userList.add(users = new ListView<RoomClient>("user", getUsers()) {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ protected void populateItem(ListItem<RoomClient> item) {
+ RoomClient rc = item.getModelObject();
+ item.setMarkupId(String.format("user%s", rc.c.getUid()));
+ item.add(new Label("name", rc.u.getFirstname() + " " + rc.u.getLastname()));
+ if (c != null && rc.c.getUid().equals(c.getUid())) {
+ item.add(AttributeAppender.append("class", "current"));
+ }
+ }
+ }.setReuseItems(true)).setOutputMarkupId(true));
add(new JQueryBehavior(".room.sidebar.left .tabs", "tabs", new Options("active", showFiles && r.isFilesOpened() ? "ftab" : "utab")) {
private static final long serialVersionUID = 1L;
@@ -249,7 +269,11 @@ public class RoomPanel extends BasePanel
if (event.getPayload() instanceof WebSocketPushPayload) {
WebSocketPushPayload wsEvent = (WebSocketPushPayload) event.getPayload();
if (wsEvent.getMessage() instanceof PollCreated) {
- //handleMessage(wsEvent.getHandler(), (PollCreated) wsEvent.getMessage());
+ //TODO check this menuPanel.modelChanged();
+ wsEvent.getHandler().add(menuPanel);
+ } else if (wsEvent.getMessage() instanceof UserListMessage) {
+ users.setList(getUsers());
+ wsEvent.getHandler().add(userList);
}
}
super.onEvent(event);
@@ -258,9 +282,9 @@ public class RoomPanel extends BasePanel
private JSONArray getStringLabels(long... ids) {
JSONArray arr = new JSONArray();
try {
- for (long id : ids) {
- arr.put(new JSONObject().put("id", id).put("value", WebSession.getString(id)));
- }
+ for (long id : ids) {
+ arr.put(new JSONObject().put("id", id).put("value", WebSession.getString(id)));
+ }
} catch (JSONException e) {
log.error("", e);
}
@@ -289,59 +313,27 @@ public class RoomPanel extends BasePanel
}
}
}
- sendRoom(roomId, addUser(c));
- }
-
- public static JSONObject getUser(Client c, boolean current) throws JSONException {
- User u = getBean(UserDao.class).get(c.getUserId());
- return new JSONObject()
- .put("uid", c.getUid())
- .put("id", u.getId())
- .put("firstname", u.getFirstname())
- .put("lastname", u.getLastname())
- .put("email", u.getAdresses() == null ? null : u.getAdresses().getEmail())
- .put("current", current);
- }
-
- public static String userList(long roomId, Client cur) {
- try {
- JSONArray ul = new JSONArray();
- for (Client c : getRoomUsers(roomId)) {
- ul.put(getUser(c, c.equals(cur)));
- }
- return new JSONObject()
- .put("type", "room")
- .put("msg", "users")
- .put("timestamp", System.currentTimeMillis())
- .put("users", ul).toString();
- } catch (Exception e) {
- log.error("Error while creating message", e);
- }
- return "{}";
- }
-
- public static String addUser(Client c) {
- try {
- return new JSONObject()
- .put("type", "room")
- .put("msg", "addUser")
- .put("user", getUser(c, false)).toString();
- } catch (Exception e) {
- log.error("Error while creating message", e);
- }
- return "{}";
}
- public static String removeUser(Client c) {
- try {
- return new JSONObject()
- .put("type", "room")
- .put("msg", "removeUser")
- .put("uid", c.getUid()).toString();
- } catch (Exception e) {
- log.error("Error while creating message", e);
+ public static void broadcast(long roomId, final RoomMessage m) {
+ WebSocketSettings settings = WebSocketSettings.Holder.get(Application.get());
+ IWebSocketConnectionRegistry reg = settings.getConnectionRegistry();
+ Executor executor = settings.getWebSocketPushMessageExecutor();
+ for (Client c : getRoomUsers(roomId)) {
+ try {
+ final IWebSocketConnection wsConnection = reg.getConnection(Application.get(), c.getSessionId(), new PageIdKey(c.getPageId()));
+ executor.run(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ wsConnection.sendMessage(m);
+ }
+ });
+ } catch (Exception e) {
+ log.error("Error while sending message", e);
+ }
}
- return "{}";
}
public static void sendRoom(long roomId, String msg) {
@@ -362,7 +354,6 @@ public class RoomPanel extends BasePanel
@Override
public void onClick(MainPage page, AjaxRequestTarget target) {
- target.appendJavaScript("$('.room.video').dialog('destroy');");
if (WebSession.getRights().contains(Right.Dashboard)) {
page.updateContents(ROOMS_PUBLIC, target);
} else {
@@ -420,8 +411,7 @@ public class RoomPanel extends BasePanel
public void cleanup(AjaxRequestTarget target) {
target.add(getMainPage().getHeader().setVisible(true), getMainPage().getMenu().setVisible(true)
, getMainPage().getTopLinks().setVisible(true));
- target.appendJavaScript("$(window).off('resize.openmeetings');");
- sendRoom(roomId, removeUser(c));
+ target.appendJavaScript("$(window).off('resize.openmeetings'); $('.room.video').dialog('destroy');");
}
private ResourceReference newResourceReference() {
@@ -435,6 +425,25 @@ public class RoomPanel extends BasePanel
response.render(OnDomReadyHeaderItem.forScript(aab.getCallbackScript()));
}
+ private List<RoomClient> getUsers() {
+ List<RoomClient> list = new ArrayList<RoomPanel.RoomClient>();
+ for (Client c : getRoomUsers(roomId)) {
+ list.add(new RoomClient(c));
+ }
+ return list;
+ }
+
+ static class RoomClient implements Serializable {
+ private static final long serialVersionUID = 1L;
+ private final Client c;
+ private final User u;
+
+ RoomClient(Client c) {
+ this.c = c;
+ this.u = getBean(UserDao.class).get(c.getUserId());
+ }
+ }
+
static class FilesTreeProvider implements ITreeProvider<FileExplorerItem> {
private static final long serialVersionUID = 1L;
Long roomId = null;
Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserListMessage.java (from r1624336, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserEnter.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserListMessage.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserListMessage.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserEnter.java&r1=1624336&r2=1624338&rev=1624338&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserEnter.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/UserListMessage.java Thu Sep 11 17:09:38 2014
@@ -18,14 +18,20 @@
*/
package org.apache.openmeetings.web.room.message;
-public class UserEnter extends RoomMessage {
+public class UserListMessage extends RoomMessage {
private static final long serialVersionUID = 1L;
+ public enum Type {
+ enter
+ , exit
+ }
private final Long userId;
private final Long roomId;
+ private final Type type;
- public UserEnter(Long userId, Long roomId) {
+ public UserListMessage(Long userId, Long roomId, Type type) {
this.userId = userId;
this.roomId = roomId;
+ this.type = type;
}
public long getPollId() {
@@ -35,4 +41,8 @@ public class UserEnter extends RoomMessa
public Long getRoomId() {
return roomId;
}
+
+ public Type getType() {
+ return type;
+ }
}