Package org.jwebsocket.plugins

Source Code of org.jwebsocket.plugins.BasePlugInChain

//  ---------------------------------------------------------------------------
//  jWebSocket - Plug in chain for incoming requests (per server)
//  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.plugins;

import org.jwebsocket.kit.PlugInResponse;
import org.jwebsocket.api.WebSocketPlugIn;
import org.jwebsocket.api.WebSocketPlugInChain;
import java.util.List;

import javolution.util.FastList;

import org.apache.log4j.Logger;
import org.jwebsocket.api.WebSocketConnector;
import org.jwebsocket.api.WebSocketEngine;
import org.jwebsocket.api.WebSocketPacket;
import org.jwebsocket.api.WebSocketServer;
import org.jwebsocket.kit.CloseReason;
import org.jwebsocket.logging.Logging;

/**
* Implements the basic chain of plug-ins which is triggered by a server
* when data packets are received. Each data packet is pushed through the chain
* and can be processed by the plug-ins.
* @author aschulze
*/
public class BasePlugInChain implements WebSocketPlugInChain {

  private static Logger mLog = Logging.getLogger(BasePlugInChain.class);
  private List<WebSocketPlugIn> mPlugins = new FastList<WebSocketPlugIn>();
  private WebSocketServer mServer = null;

  /**
   *
   * @param aServer
   */
  public BasePlugInChain(WebSocketServer aServer) {
    mServer = aServer;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void engineStarted(WebSocketEngine aEngine) {
    if (mLog.isDebugEnabled()) {
      mLog.debug("Notifying plug-ins of server '" + getServer().getId() + "' that engine '" + aEngine.getId() + "' started...");
    }
    try {
      for (WebSocketPlugIn lPlugIn : getPlugIns()) {
        try {
          lPlugIn.engineStarted(aEngine);
        } catch (Exception ex) {
          mLog.error("Engine '" + aEngine.getId() + "' started (1): " + ex.getClass().getSimpleName() + ": " + ex.getMessage());
        }
      }
    } catch (Exception ex) {
      mLog.error("Engine '" + aEngine.getId() + "' started (2): " + ex.getClass().getSimpleName() + ": " + ex.getMessage());
    }
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public void engineStopped(WebSocketEngine aEngine) {
    if (mLog.isDebugEnabled()) {
      mLog.debug("Notifying plug-ins of server '" + getServer().getId()
          + "' that engine '" + aEngine.getId()
          + "' stopped...");
    }
    try {
      for (WebSocketPlugIn lPlugIn : getPlugIns()) {
        try {
          /*
          if (mLog.isDebugEnabled()) {
            mLog.debug("Notifying plug-in '"
                + lPlugIn.getClass().getSimpleName()
                + "' of server '" + getServer().getId()
                + "' that engine '" + aEngine.getId()
                + "' stopped...");
          }
           */
          lPlugIn.engineStopped(aEngine);
        } catch (Exception ex) {
          mLog.error("Engine '" + aEngine.getId()
              + "' stopped (1): " + ex.getClass().getSimpleName()
              + ": " + ex.getMessage());
        }
      }
    } catch (Exception ex) {
      mLog.error("Engine '" + aEngine.getId()
          + "' stopped (2): " + ex.getClass().getSimpleName()
          + ": " + ex.getMessage());
    }
  }

  /**
   * @param aConnector
   */
  @Override
  public void connectorStarted(WebSocketConnector aConnector) {
    if (mLog.isDebugEnabled()) {
      mLog.debug("Notifying plug-ins that connector '" + aConnector.getId() + "' started...");
    }
    try {
      for (WebSocketPlugIn lPlugIn : getPlugIns()) {
        try {
          // log.debug("Notifying plug-in " + plugIn + " that connector started...");
          lPlugIn.connectorStarted(aConnector);
        } catch (Exception ex) {
          mLog.error("Connector '" + aConnector.getId() + "' started (1): " + ex.getClass().getSimpleName() + ": " + ex.getMessage());
        }
      }
    } catch (Exception ex) {
      mLog.error("Connector '" + aConnector.getId() + "' started (2): " + ex.getClass().getSimpleName() + ": " + ex.getMessage());
    }
  }

  /**
   *
   * @param aConnector
   * @return
   */
  @Override
  public PlugInResponse processPacket(WebSocketConnector aConnector, WebSocketPacket aDataPacket) {
    if (mLog.isDebugEnabled()) {
      mLog.debug("Processing packet for plug-ins on connector '" + aConnector.getId() + "'...");
    }
    PlugInResponse lPluginResponse = new PlugInResponse();
    for (WebSocketPlugIn lPlugIn : getPlugIns()) {
      try {
        /*
        if (log.isDebugEnabled()) {
        log.debug("Processing packet for plug-in " + plugIn + "...");
        }
         */
        lPlugIn.processPacket(lPluginResponse, aConnector, aDataPacket);
      } catch (Exception ex) {
        mLog.error("Processing packet on connector '" + aConnector.getId() + "': " + ex.getClass().getSimpleName() + ": " + ex.getMessage());
      }
      if (lPluginResponse.isChainAborted()) {
        break;
      }
    }
    return lPluginResponse;
  }

  /**
   *
   * @param aConnector
   * @param aCloseReason
   */
  @Override
  public void connectorStopped(WebSocketConnector aConnector, CloseReason aCloseReason) {
    if (mLog.isDebugEnabled()) {
      mLog.debug("Notifying plug-ins that connector '" + aConnector.getId() + "' stopped (" + aCloseReason.name() + ")...");
    }
    for (WebSocketPlugIn lPlugIn : getPlugIns()) {
      try {
        // log.debug("Notifying plug-in " + plugIn + " that connector stopped...");
        lPlugIn.connectorStopped(aConnector, aCloseReason);
      } catch (Exception ex) {
        mLog.error("Connector '" + aConnector.getId() + "' stopped: " + ex.getClass().getSimpleName() + ": " + ex.getMessage());
      }
    }
  }

  /**
   *
   * @return
   */
  @Override
  public List<WebSocketPlugIn> getPlugIns() {
    return mPlugins;
  }

  /**
   *
   * @param aPlugIn
   */
  @Override
  public void addPlugIn(WebSocketPlugIn aPlugIn) {
    mPlugins.add(aPlugIn);
    aPlugIn.setPlugInChain(this);
  }

  /**
   *
   * @param aPlugIn
   */
  @Override
  public void removePlugIn(WebSocketPlugIn aPlugIn) {
    mPlugins.remove(aPlugIn);
    aPlugIn.setPlugInChain(null);
  }

  /**
   * @return the server
   */
  @Override
  public WebSocketServer getServer() {
    return mServer;
  }
}
TOP

Related Classes of org.jwebsocket.plugins.BasePlugInChain

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.