Package org.rzo.yajsw.controller.jvm

Source Code of org.rzo.yajsw.controller.jvm.ControllerHandler

package org.rzo.yajsw.controller.jvm;

import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelPipelineCoverage;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
import org.rzo.yajsw.Constants;
import org.rzo.yajsw.controller.Message;

@ChannelPipelineCoverage("one")
public class ControllerHandler extends SimpleChannelUpstreamHandler implements Constants
{

  JVMController  _controller;

  ControllerHandler(JVMController controller)
  {
    _controller = controller;
  }

  @Override
  public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception
  {
    Message message = (Message) e.getMessage();
    switch (message.getCode())
    {
    case WRAPPER_MSG_KEY:
      // check if JVM sent us correct key
      if (_controller._key.equals(message.getMessage()))
      {
        _controller.setState(JVMController.STATE_LOGGED_ON);
        _controller.startupOK();
        ctx.getChannel().write(new Message(Constants.WRAPPER_MSG_OKKEY, "" + _controller._wrappedProcess.getAppPid()));
        if (_controller.isDebug())
          _controller.getLog().info("Correct key");
      }
      // if not: announce it and close session
      else
      {
        if (_controller.isDebug())
          _controller.getLog().info("Wrong key -> closing session");
        ctx.getChannel().write(new Message(Constants.WRAPPER_MSG_BADKEY, null));
        ctx.getChannel().close();
      }
      break;
    case Constants.WRAPPER_MSG_STOP:
      if (_controller._wrappedProcess != null)
        _controller._wrappedProcess.stop();
      break;

    case Constants.WRAPPER_MSG_STOP_TIMER:
      if (_controller._wrappedProcess != null)
        _controller._wrappedProcess.stopTimer();
      break;

    case Constants.WRAPPER_MSG_RESTART:
      if (_controller._wrappedProcess != null)
        _controller._wrappedProcess.restartInternal();

      break;

    case Constants.WRAPPER_MSG_PING:
      _controller.pingReceived();
      break;

    case Constants.WRAPPER_MSG_SERVICE_STARTUP:
      _controller.serviceStartup();
      break;

    }
  }

  @Override
  public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception
  {

    // we accept only one session. if we already have one -> close the
    // new session
    if (_controller._channel != null && _controller._channel != ctx.getChannel())
    {
      if (_controller.isDebug())
        _controller.getLog().info("session already established -> ignore further sessions");
      ctx.getChannel().close();
    }
    else if (_controller._channel == null)
    {
      _controller.setState(JVMController.STATE_ESTABLISHED);
      _controller._channel = ctx.getChannel();
    }

  }

  @Override
  public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception
  {
    if (_controller._channel == ctx.getChannel())
    {
      // stop processing outgoing messages
      _controller.workerExecutor.shutdownNow();

      // stop the controller
      _controller._channel = null;
      _controller.setState(JVMController.STATE_WAITING_CLOSED);
      if (_controller.isDebug())
        _controller.getLog().info("session closed -> waiting");
    }
  }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception
  {
    if (_controller.isDebug())
      _controller.getLog().info(e.getCause().getMessage());

  }

}
TOP

Related Classes of org.rzo.yajsw.controller.jvm.ControllerHandler

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.