// --------------------------------------------------------------------------- // jWebSocket - Copyright (c) 2010 jwebsocket.org // --------------------------------------------------------------------------- // 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.console; import java.util.List; import javolution.util.FastList; import org.apache.log4j.Logger; import org.jwebsocket.api.EngineConfiguration; import org.jwebsocket.api.ServerConfiguration; import org.jwebsocket.api.WebSocketServerListener; import org.jwebsocket.config.JWebSocketCommonConstants; import org.jwebsocket.config.JWebSocketServerConstants; import org.jwebsocket.config.LoggingConfig; import org.jwebsocket.config.xml.EngineConfig; import org.jwebsocket.config.xml.ServerConfig; import org.jwebsocket.kit.CloseReason; import org.jwebsocket.kit.WebSocketException; import org.jwebsocket.logging.Logging; import org.jwebsocket.plugins.TokenPlugInChain; import org.jwebsocket.plugins.flashbridge.FlashBridgePlugIn; import org.jwebsocket.plugins.system.SystemPlugIn; import org.jwebsocket.server.TokenServer; import org.jwebsocket.tcp.TCPEngine; /** * Example of a pure programmatic embedded jWebSocket server. * @author aschulze */ public class JWebSocketSubSystemSample { private static Logger mLog = null; private TokenServer mServer = null; private TCPEngine mEngine = null; /** */ public JWebSocketSubSystemSample() { // the following 3 lines may not be removed due to GNU LGPL 3.0 license! System.out.println("jWebSocket Ver. " + JWebSocketServerConstants.VERSION_STR + " (" + System.getProperty("sun.arch.data.model") + "bit)"); System.out.println(JWebSocketCommonConstants.COPYRIGHT); System.out.println(JWebSocketCommonConstants.LICENSE); // initialize the logging system LoggingConfig lLoggingConfig = new LoggingConfig( "console", // target "%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %C{1}: %m%n", // pattern "debug", // level "jWebSocket.log", // file name, if logging to file only 4096 // bufferSize, if logging to file only ); Logging.initLogs(lLoggingConfig, new String[]{"%JWEBSOCKET_HOME%/logs", "%CATALINA_HOME%/logs"}); mLog = Logging.getLogger(JWebSocketEmbedded.class); // initialize the engine List lDomains = new FastList(); lDomains.add("http://jwebsocket.org"); EngineConfiguration lEngineConfig = new EngineConfig( "tcp0", // id "org.jwebsocket.tcp.engines.TCPEngine", // name "-", // jar, needs to be in classpath, i.e. embedded in .jar'/manifest 8787, // unsecured nonssl-port 9797, // secured ssl-port null, // context if such null, // servlet if such 120000, // default session timeout JWebSocketCommonConstants.DEFAULT_MAX_FRAME_SIZE, // max framesize lDomains // list of accepted domains ); mEngine = new TCPEngine(lEngineConfig); // if engine could be instantiated properly... if (mEngine != null) { // initialize the server ServerConfiguration lServerConfig = new ServerConfig( "ts0", // id "org.jwebsocket.server.TokenServer", // name "-" // jar, needs to be in classpath, i.e. embedded in .jar'/manifest ); mServer = new TokenServer(lServerConfig); // link server and engine mEngine.addServer(mServer); mServer.addEngine(mEngine); // add desired plug-ins TokenPlugInChain lPlugInChain = mServer.getPlugInChain(); // the system plug-in is essential to process authentication // send and broadcast lPlugInChain.addPlugIn(new SystemPlugIn()); // the FlashBrigde plug-in is strongly recommended to also support // non websocket compliant browsers lPlugInChain.addPlugIn(new FlashBridgePlugIn()); } } public void start() { // start the jWebsocket Server try { mEngine.startEngine(); } catch (WebSocketException ex) { mLog.error("Exception on starting jWebSocket engine: " + ex.getMessage()); } try { mServer.startServer(); } catch (WebSocketException ex) { mLog.error("Exception on starting jWebSocket server: " + ex.getMessage()); } } public void run() { // wait until engine has terminated (e.g. by "shutdown" command) // TODO: Use JWebSocketInstance getState here! while (mEngine.isAlive()) { try { Thread.sleep(250); } catch (InterruptedException ex) { // no handling required here } } } public void stop() { try { // terminate all instances mEngine.stopEngine(CloseReason.SERVER); } catch (WebSocketException ex) { mLog.error("Exception on stopping jWebSocket subsystem: " + ex.getMessage()); } } /** * adds a new listener to the server of the jWebSocket subsystem. * @param aListener */ public void addListener(WebSocketServerListener aListener) { if (aListener != null && mServer != null) { // add listener to the server mServer.addListener(aListener); } } /** * removes a listener from the server of the jWebSocket subsystem. * @param aListener */ public void removeListener(WebSocketServerListener aListener) { if (aListener != null && mServer != null) { // remove listener from the server mServer.removeListener(aListener); } } }