/*
 * Copyright (c) 2007, 2017 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package org.glassfish.grizzly.comet;

import java.io.IOException;

import org.glassfish.grizzly.http.server.Response;

This interface represents a suspended connection (or response). Passing an instance of this class to CometContext.addCometHandler(CometHandler) automatically tells Grizzly Comet to suspend the underlying connection and to avoid committing the response. Since the response is not committed, the connection is considered as suspended and can be resumed later when an event happens by invoking CometContext.resumeCometHandler(CometHandler), from onEvent. CometContext.resumeCometHandler(CometHandler), resume the connection by committing the response. As an example, a browser icons will spins when a connection is suspended, as the complete response hasn't been sent back.

Components that implement this interface will be notified Object.notify() is invoked or when the CometContext.getExpirationDelay() expires.
/** * This interface represents a suspended connection (or response). Passing an instance of this class to * {@link CometContext#addCometHandler(CometHandler)} automatically tells Grizzly Comet to suspend the underlying connection and to avoid * committing the response. Since the response is not committed, the connection is considered as suspended and can be * resumed later when an event happens by invoking {@link CometContext#resumeCometHandler(CometHandler)}, from {@link * CometHandler#onEvent}. {@link CometContext#resumeCometHandler(CometHandler)}, resume the connection by committing the * response. As an example, a browser icons will spins when a connection is suspended, as the complete response hasn't * been sent back. * <p/> * Components that implement this interface will be notified {@link org.glassfish.grizzly.comet.CometContext#notify()} is invoked * or when the {@link CometContext#getExpirationDelay()} expires. */
public interface CometHandler<E> {
Returns:the response associated with the handler.
/** * @return the response associated with the handler. */
Response getResponse(); void setResponse(Response response); CometContext<E> getCometContext(); void setCometContext(CometContext<E> context);
Receive CometEvent notification. This method will be invoked every time a Object.notify is invoked. The CometEvent will contains the message that can be pushed back to the remote client, cached or ignored. This method can also be used to resume a connection once a notified by invoking CometContext.resumeCometHandler.
its not optimal to flush outputstream in this method for long polling, flush is performed in each CometContext.resume call.
flushing multiple times can fragment the data into several tcp packets, that leads to extra IO and overhead in general due to client ack for each packet etc.
/** * Receive {@link CometEvent} notification. This method will be invoked every time a {@link CometContext#notify} is * invoked. The {@link CometEvent} will contains the message that can be pushed back to the remote client, cached or * ignored. This method can also be used to resume a connection once a notified by invoking {@link * CometContext#resumeCometHandler}.<br> its not optimal to flush outputstream in this method for long polling, * flush is performed in each CometContext.resume call.<br> flushing multiple times can fragment the data into * several tcp packets, that leads to extra IO and overhead in general due to client ack for each packet etc. */
void onEvent(CometEvent event) throws IOException;
Receive CometEvent notification when Grizzly is about to suspend the connection. This method is always invoked during the processing of CometContext.addCometHandler operations.
/** * Receive {@link CometEvent} notification when Grizzly is about to suspend the connection. This method is always * invoked during the processing of {@link CometContext#addCometHandler} operations. */
void onInitialize(CometEvent event) throws IOException;
Receive CometEvent notification when the response is resumed by a CometHandler or by the CometContext
/** * Receive {@link CometEvent} notification when the response is resumed by a {@link CometHandler} or by the {@link * CometContext} */
void onTerminate(CometEvent event) throws IOException;
Receive CometEvent notification when the underlying tcp communication is resumed by Grizzly. This happens when the CometContext.setExpirationDelay expires or when the remote client close the connection.
/** * Receive {@link CometEvent} notification when the underlying tcp communication is resumed by Grizzly. This happens * when the {@link CometContext#setExpirationDelay} expires or when the remote client close the connection. */
void onInterrupt(CometEvent event) throws IOException; }