
org.coweb.ModeratorLateJoinHandler Maven / Gradle / Ivy
package org.coweb;
import java.util.Map;
import java.util.HashMap;
import java.util.logging.Logger;
import org.cometd.bayeux.Message;
import org.cometd.bayeux.server.ServerSession;
import org.eclipse.jetty.util.ajax.JSON;
public class ModeratorLateJoinHandler extends LateJoinHandler {
private static final Logger log = Logger
.getLogger(ModeratorLateJoinHandler.class.getName());
public ModeratorLateJoinHandler(SessionHandler sessionHandler,
Map config) {
super(sessionHandler, config);
}
@Override
public void onClientJoin(ServerSession client, Message message) {
log.info("ModeratorLateJoinHandler::onClientJoin *************");
int siteId = this.getSiteForClient(client);
if (siteId == -1) {
siteId = this.addSiteForClient(client);
}
log.info("siteId = " + siteId);
Map roster = this.getRosterList(client);
// Construct message: 1) app data, 2) engine state.
Map collabs = this.sessionModerator.getLateJoinState();
Object[] data = new Object[collabs.size() + 1];
// 1) App data.
int cnt = 0;
for (Map.Entry collab: collabs.entrySet()) {
HashMap hm = new HashMap();
hm.put("topic", "coweb.state.set." + collab.getKey());
hm.put("value", collab.getValue());
data[cnt++] = hm;
}
// 2) Engine state.
HashMap engState = new HashMap();
engState.put("topic", "coweb.engine.state");
engState.put("value", this.sessionHandler.getEngineState());
data[cnt++] = engState;
/* 3) Paused sync buffer. Since the moderator never pauses itself from processing sync events, we can safely
ignore sending this (we would be sending an empty array otherwise). */
/* HashMap pauseState = new HashMap();
pauseState.put("topic", "coweb.pause.state");
pauseState.put("value", new Object[0]);
data[cnt++] = pauseState; */
if (this.updaters.isEmpty())
this.addUpdater(client, false);
else
this.addUpdater(client, true);
client.batch(new BatchUpdateMessage(client, siteId, roster, data, true));
}
public void onUpdaterSendState(ServerSession client, Message message) {
// should never get here.
return;
}
@Override
protected void removeUpdater(ServerSession client) {
this.removeSiteForClient(client);
this.updaters.remove(client.getId());
this.sendRosterUnavailable(client);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy