Package org.jwebsocket.console

Source Code of org.jwebsocket.console.JWebSocketSubSystemSample

//  ---------------------------------------------------------------------------
//  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.engines.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, // port
        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);
    }
  }
}
TOP

Related Classes of org.jwebsocket.console.JWebSocketSubSystemSample

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.