package org.gwtoolbox.comet.client;
import com.google.gwt.core.client.GWT;
import net.zschech.gwt.comet.client.CometClient;
import net.zschech.gwt.comet.client.CometListener;
import net.zschech.gwt.comet.client.CometSerializer;
import org.gwtoolbox.ioc.core.client.annotation.Component;
import org.gwtoolbox.ioc.core.client.annotation.Disposer;
import org.gwtoolbox.ioc.core.client.annotation.Initializer;
import org.gwtoolbox.ioc.core.client.annotation.Inject;
/**
* Manages the life cycle of the application-wide {@link CometClient} for receiving events pushed by the server.
*
* @author Tom van Zummeren
*/
@Component
public class CometClientLifeCycle {
public static final String COMET_URL = "/events.comet";
private CometClient cometClient;
private CometListener cometListener;
/**
* Constructs a new {@link CometClientLifeCycle}.
*
* @param cometListener used to process event messages from the server
*/
@Inject
public CometClientLifeCycle(CometListener cometListener) {
this.cometListener = cometListener;
}
/**
* Creates and starts a new {@link CometClient} when the application starts.
*/
@Initializer
public void startComet() {
CometSerializer serializer = GWT.create(CometEventSerializer.class);
cometClient = new CometClient(COMET_URL, serializer, cometListener);
cometClient.start();
}
/**
* Stops the {@link CometClient} when the application stops.
*/
@Disposer
public void stop() {
if (cometClient != null) {
cometClient.stop();
cometClient = null;
}
}
}