All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.coweb.ModeratorLateJoinHandler Maven / Gradle / Ivy

There is a newer version: 1.0
Show newest version
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