// ---------------------------------------------------------------------------
// jWebSocket - Server API
// Copyright (c) 2010 Alexander Schulze, Innotrade GmbH
// ---------------------------------------------------------------------------
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published by the
// Free Software Foundation; either version 3 of the License, or (at your
// option) any later version.
// This program is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
// more details.
// You should have received a copy of the GNU Lesser General Public License along
// with this program; if not, see <http://www.gnu.org/licenses/lgpl.html>.
// ---------------------------------------------------------------------------
package org.jwebsocket.api;
import java.util.List;
import java.util.Map;
import org.jwebsocket.async.IOFuture;
import org.jwebsocket.kit.BroadcastOptions;
import org.jwebsocket.kit.CloseReason;
import org.jwebsocket.kit.WebSocketException;
/**
* Specifies the API of the jWebSocket server core and its capabilities. Each
* server can be bound to one or multiple engines. Each engine can drive or
* more servers above.
* The servers usually are not supposed to directly implement any business
* logic - except for very small or special non token based applications.
* For applications it is recommended to implement them in plug-ins based on
* the token server.
* @author aschulze
* @version $Id: WebSocketServer.java 625 2010-07-06 17:33:33Z fivefeetfurther $
*/
public interface WebSocketServer {
/**
* Starts the server and all underlying engines.
* @throws WebSocketException
*/
void startServer() throws WebSocketException;
/**
* States if at least one of the engines is still running.
* @return Boolean state if at least one of the underlying engines is still running.
*/
boolean isAlive();
/**
* Stops the server and all underlying engines.
* @throws WebSocketException
*/
void stopServer() throws WebSocketException;
/**
* Adds a new engine to the server.
* @param aEngine to be added to the server.
*/
void addEngine(WebSocketEngine aEngine);
/**
* Removes a already bound engine from the server.
* @param aEngine to be removed from the server.
*/
void removeEngine(WebSocketEngine aEngine);
/**
* Is called from the underlying engine when the engine is started.
* @param aEngine
*/
void engineStarted(WebSocketEngine aEngine);
/**
* Is called from the underlying engine when the engine is stopped.
* @param aEngine
*/
void engineStopped(WebSocketEngine aEngine);
/**
* Notifies the application that a client connector has been started.
* @param aConnector the new connector that has been instantiated.
*/
void connectorStarted(WebSocketConnector aConnector);
/**
* Notifies the application that a client connector has been stopped.
* @param aConnector
* @param aCloseReason
*/
void connectorStopped(WebSocketConnector aConnector, CloseReason aCloseReason);
/**
* Is called when the underlying engine received a packet from a connector.
* @param aEngine
* @param aConnector
* @param aDataPacket
*/
void processPacket(WebSocketEngine aEngine, WebSocketConnector aConnector, WebSocketPacket aDataPacket);
/**
* Sends a packet to a certain connector.
* @param aConnector
* @param aDataPacket
*/
void sendPacket(WebSocketConnector aConnector, WebSocketPacket aDataPacket);
/**
* Sends the data packet asynchronously to the output channel through the given target
* connector. This is a asynchronous output process which returns the future object
* to check the status and control the output operation.
*
* @param aConnector the target connector to use for the packet output
* @param aDataPacket the data packet
* @return the future object for this output operation
*/
IOFuture sendPacketAsync(WebSocketConnector aConnector, WebSocketPacket aDataPacket);
/**
* Broadcasts a datapacket to all connectors.
* @param aSource
* @param aDataPacket
* @param aBroadcastOptions
*/
void broadcastPacket(WebSocketConnector aSource, WebSocketPacket aDataPacket,
BroadcastOptions aBroadcastOptions);
/**
* Returns the unique ID of the server. Because the jWebSocket model
* supports multiple servers based on one or more engines (drivers)
* each server has its own ID so that it can be addressed properly.
* @return String Unique ID of the Server.
*/
String getId();
/**
* Returns the plugin chain for the server .
* @return the plugInChain
*/
WebSocketPlugInChain getPlugInChain();
/**
* Returns the filter chain for the server.
* @return the filterChain
*/
WebSocketFilterChain getFilterChain();
/**
*
* @param aListener
*/
void addListener(WebSocketServerListener aListener);
/**
*
* @param aListener
*/
void removeListener(WebSocketServerListener aListener);
/**
* Returns the list of listeners for the server.
* @return the filterChain
*/
List<WebSocketServerListener> getListeners();
/**
*
* @param aConnector
* @return
*/
String getUsername(WebSocketConnector aConnector);
/**
*
* @param aConnector
* @param aUsername
*/
void setUsername(WebSocketConnector aConnector, String aUsername);
/**
*
* @param aConnector
*/
void removeUsername(WebSocketConnector aConnector);
/**
*
* @param aConnector
* @return
*/
String getNodeId(WebSocketConnector aConnector);
/**
*
* @param aConnector
* @param aNodeId
*/
void setNodeId(WebSocketConnector aConnector, String aNodeId);
/**
*
* @param aConnector
*/
void removeNodeId(WebSocketConnector aConnector);
WebSocketConnector getConnector(String aId);
WebSocketConnector getConnector(String aFilterId, Object aFilterValue);
WebSocketConnector getNode(String aNodeId);
Map<String, WebSocketConnector> getConnectors(WebSocketEngine aEngine);
Map<String, WebSocketConnector> selectConnectors(Map<String, Object> aFilter);
Map<String, WebSocketConnector> getAllConnectors();
void setServerConfiguration(ServerConfiguration configuration);
ServerConfiguration getServerConfiguration();
}