Package org.rzo.netty.ahessian.session

Source Code of org.rzo.netty.ahessian.session.SessionImpl

package org.rzo.netty.ahessian.session;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jboss.netty.util.Timeout;
import org.rzo.netty.ahessian.Constants;

/**
* The Class SessionImpl.
*/
class SessionImpl implements Session
{
 
  private String _id;
 
  private List<Runnable> _closedListeners = Collections.synchronizedList(new ArrayList<Runnable>());
  private List<Runnable> _invalidatedListeners = Collections.synchronizedList(new ArrayList<Runnable>());
 
  private Map<String, Object> _attributes = new HashMap<String, Object>();
 
  private long _created = System.currentTimeMillis();
  private volatile long _connected  = System.currentTimeMillis();
 
  private volatile boolean _new = true;
 
  private volatile Timeout _timeout = null;
 
  private volatile boolean _valid = true;
 
  private volatile boolean _closed = false;
 
  private volatile long _messageCount = 0;
 
  /**
   * Instantiates a new session impl.
   *
   * @param id the id
   */
  SessionImpl(String id)
  {
    _id = id;
    _created = System.currentTimeMillis();
   
  }

  /* (non-Javadoc)
   * @see handler.session.Session#getId()
   */
 
  public String getId()
  {
    return _id;
  }

  /* (non-Javadoc)
   * @see handler.session.Session#addClosedListener(java.lang.Runnable)
   */
 
  public void addClosedListener(Runnable listener)
  {
    _closedListeners.add(listener);
  }

  /* (non-Javadoc)
   * @see handler.session.Session#close()
   */
 
  public void close()
  {
    _closed = true;
    _connected = -1;
    synchronized(_closedListeners)
    {
      for (Runnable listener : _closedListeners)
        try
      {
        listener.run();
      }
      catch (Throwable ex)
      {
        Constants.ahessianLogger.warn(" execption in closedListener in session: "+_id+ " "+ex);
      }
    }
  }

  public void addInvalidatedListener(Runnable listener)
  {
    _invalidatedListeners.add(listener);
  }

  public Object getAttribute(String name)
  {
    return _attributes.get(name);
  }

  public Collection<String> getAttributeNames()
  {
    return new ArrayList(_attributes.keySet());
  }

  public long getCreationTime()
  {
    return _created;
  }

  public long getLastConnectedTime()
  {
    return _connected;
  }

  public void invalidate()
  {
    _valid = false;
    synchronized(_invalidatedListeners)
    {
      for (Runnable listener : _invalidatedListeners)
        try
      {
        listener.run();
      }
      catch (Throwable ex)
      {
        Constants.ahessianLogger.warn(" execption in invalidatedListener in session: "+_id+ " "+ex);
      }
    }
  }

  public boolean isNew()
  {
    return _new;
  }

  public void removeAttribute(String name)
  {
    _attributes.remove(name);
  }

  public void setAttribute(String name, Object value)
  {
    _attributes.put(name, value);
  }

  public void setNew(boolean newValue)
  {
    _new = newValue;
  }
 
  public void setTimeOut(Timeout timeOut)
  {
    _timeout = timeOut;
  }
 
  public Timeout removeTimeout()
  {
    Timeout result = _timeout;
    _timeout = null;
    return result;
  }
 
  public boolean isValid()
  {
    return _valid;
  }

  public void onMessage()
  {
    _messageCount++;
  }
 
  public void onConnected()
  {
    _connected = System.currentTimeMillis();
  }

  public long getMessageCount()
  {
    return _messageCount;
  }

  public boolean isClosed()
  {
    return _closed;
  }

  public void setClosed(boolean b)
  {
    _closed = b;
  }

}
TOP

Related Classes of org.rzo.netty.ahessian.session.SessionImpl

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.