blob: c76bae5e9070db8d35cf5b7ef09b0baca367eb31 [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.rhttp.client;
import java.io.IOException;
/**
* <p><tt>RHTTPClient</tt> represent a client of the gateway server.</p>
* <p>A <tt>Client</tt> has a server side counterpart with which communicates
* using a comet protocol.<br /> The <tt>Client</tt>, its server-side
* counterpart and the comet protocol form the <em>Half-Object plus Protocol</em>
* pattern.</p>
* <p>A <tt>Client</tt> must first connect to the gateway server, to let the gateway
* server know its targetId, an identifier that uniquely distinguish this
* <tt>Client</tt> from other <tt>Client</tt>s.</p>
* <p>Once connected, the gateway server will use a comet procotol to notify the
* <tt>Client</tt> of server-side events, and the <tt>Client</tt> can send
* information to the gateway server to notify it of client-side events.</p>
* <p>Server-side event are notified to {@link RHTTPListener}s, while relevant
* network events are communicated to {@link ClientListener}s.</p>
*
* @version $Revision$ $Date$
*/
public interface RHTTPClient
{
/**
* @return The gateway uri, typically "http://gatewayhost:gatewayport/gatewaypath".
*/
public String getGatewayURI();
/**
* @return The gateway host
*/
public String getHost();
/**
* @return The gateway port
*/
public int getPort();
/**
* @return The gateway path
*/
public String getPath();
/**
* @return the targetId that uniquely identifies this client.
*/
public String getTargetId();
/**
* <p>Connects to the gateway server, establishing the long poll communication
* with the gateway server to be notified of server-side events.</p>
* <p>The connect is performed in two steps:
* <ul>
* <li>first, a connect message is sent to the gateway server; the gateway server
* will notice this is a first connect message and reply immediately with
* an empty response</li>
* <li>second, another connect message is sent to the gateway server which interprets
* it as a long poll request</li>
* </ul>
* The long poll request may return either because one or more server-side events
* happened, or because it expired. </p>
* <p>Any connect message after the first is treated as a long poll request.</p>
*
* @throws IOException if it is not possible to connect to the gateway server
* @see #disconnect()
*/
public void connect() throws IOException;
/**
* <p>Disconnects from the gateway server.</p>
* <p>Just after the disconnect request is processed by to the gateway server, it will
* return the currently outstanding long poll request.</p>
* <p>If this client is not connected, it does nothing</p>
*
* @throws IOException if it is not possible to contact the gateway server to disconnect
* @see #connect()
*/
public void disconnect() throws IOException;
/**
* <p>Sends a response to the gateway server.</p>
*
* @param response the response to send
* @throws IOException if it is not possible to contact the gateway server
*/
public void deliver(RHTTPResponse response) throws IOException;
/**
* <p>Adds the given listener to this client.</p>
* @param listener the listener to add
* @see #removeListener(RHTTPListener)
*/
public void addListener(RHTTPListener listener);
/**
* <p>Removes the given listener from this client.</p>
* @param listener the listener to remove
* @see #addListener(RHTTPListener)
*/
public void removeListener(RHTTPListener listener);
/**
* <p>Adds the given client listener to this client.</p>
* @param listener the client listener to add
* @see #removeClientListener(ClientListener)
*/
public void addClientListener(ClientListener listener);
/**
* <p>Removes the given client listener from this client.</p>
* @param listener the client listener to remove
* @see #addClientListener(ClientListener)
*/
public void removeClientListener(ClientListener listener);
}