Package org.menacheri.jetclient.event.impl

Source Code of org.menacheri.jetclient.event.impl.AbstractSessionEventHandler

package org.menacheri.jetclient.event.impl;

import org.menacheri.jetclient.app.Session;
import org.menacheri.jetclient.communication.DeliveryGuaranty.DeliveryGuarantyOptions;
import org.menacheri.jetclient.communication.MessageSender;
import org.menacheri.jetclient.event.Events;
import org.menacheri.jetclient.event.Event;
import org.menacheri.jetclient.event.NetworkEvent;
import org.menacheri.jetclient.event.SessionEventHandler;

/**
* Provides default implementation for most of the events. Subclasses can
* override the event handler method for any particular event,
* {@link AbstractSessionEventHandler}{@link #onDataIn(Event)} to do app
* specific logic.
*
* @author Abraham Menacherry
*
*/
public abstract class AbstractSessionEventHandler implements
    SessionEventHandler
{
  protected final int eventType;

  private final Session session;

  public AbstractSessionEventHandler(Session session)
  {
    this.eventType = Events.ANY;
    this.session = session;
  }

  @Override
  public int getEventType()
  {
    return eventType;
  }

  @Override
  public void onEvent(Event event)
  {
    doEventHandlerMethodLookup(event);
  }

  public void doEventHandlerMethodLookup(Event event)
  {
    int eventType = event.getType();
    switch (eventType)
    {
    case Events.SESSION_MESSAGE:
      onDataIn(event);
      break;
    case Events.NETWORK_MESSAGE:
      onNetworkMessage((NetworkEvent)event);
      break;
    case Events.LOG_IN_SUCCESS:
      onLoginSuccess(event);
      break;
    case Events.LOG_IN_FAILURE:
      onLoginFailure(event);
      break;
    case Events.START:
      onStart(event);
      break;
    case Events.STOP:
      onStart(event);
      break;
    case Events.CONNECT_FAILED:
      onConnectFailed(event);
      break;
    case Events.DISCONNECT:
      onDisconnect(event);
      break;
    case Events.CHANGE_ATTRIBUTE:
      onChangeAttribute(event);
      break;
    case Events.EXCEPTION:
      onException(event);
      break;
    default:
      onCustomEvent(event);
      break;
    }
  }

  public abstract void onDataIn(Event event);

  public void onNetworkMessage(NetworkEvent networkEvent)
  {
    Session session = getSession();
    boolean writeable = session.isWriteable();
    MessageSender messageSender = null;
    if (networkEvent.getDeliveryGuaranty().getGuaranty() == DeliveryGuarantyOptions.FAST
        .getGuaranty())
    {
      messageSender = session.getUdpMessageSender();
    }
    else
    {
      messageSender = session.getTcpMessageSender();
    }
    if (writeable && null != networkEvent)
    {
      messageSender.sendMessage(networkEvent);
    }
  }
 
  public void onLoginSuccess(Event event)
  {
  }

  public void onLoginFailure(Event event)
  {
  }

  public void onStart(Event event)
  {
    getSession().setWriteable(true);
  }

  public void onStop(Event event)
  {
    getSession().setWriteable(false);
  }

  public void onConnectFailed(Event event)
  {

  }

  public void onDisconnect(Event event)
  {
    System.out.println("Received disconnect event in session. "
        + "Going to close session");
    onClose(event);
  }

  public void onChangeAttribute(Event event)
  {

  }

  public void onException(Event event)
  {
    System.out.println("Received exception event in session. "
        + "Going to close session");
    onClose(event);
  }

  public void onClose(Event event)
  {
    getSession().close();
  }

  public void onCustomEvent(Event event)
  {

  }

  @Override
  public Session getSession()
  {
    return session;
  }

}
TOP

Related Classes of org.menacheri.jetclient.event.impl.AbstractSessionEventHandler

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.