JAVA技巧辅导(客户访问限制管理器)
来源:优易学  2011-11-20 14:05:17   【优易学:中国教育考试门户网】   资料下载   IT书店

  public boolean isLimit(long guestid) {
  boolean flag = true;
  if (isLogin(guestid)) {
  update(guestid);
  flag = isLimit();
  if (flag) {
  if (guestid > 0 && limitGuest == guestid)
  flag = false;
  }// end if(flag)
  }
  return flag;
  }
  /**
  * 取得当前限制客户的标识(该标识是该管理器为客户分配的一个唯一标识)
  *
  * @return 返回当前限制客户的标识
  */
  protected long getLimitGuest() {
  return limitGuest;
  }
  /**
  * 更新客户最近使用时间
  *
  * @param guestid
  * 客户标识
  */
  protected void update(long guestid) {
  runThread();
  Hashtable<String, String> guests = getGuests();
  if (guests != null && guests.containsKey("" + guestid))
  guests.put("" + guestid, ""
  + System.currentTimeMillis());
  }
  /**
  * 运行监听线程
  */
  protected void runThread() {
  // 客户自动清理线程
  if (autoCleanThread != null && !autoCleanThread.isAlive())
  autoCleanThread = null;
  if (autoCleanThread == null) {
  autoCleanThread = new AutoCleanThread();
  autoCleanThread.start();
  }// end if (autoCleanThread == null)
  }
  /**
  * 设置自动清理客户记录的间隔时间
  *
  * @param time
  * 间隔时间(毫秒)
  */
  public void setCleanInterval(long time) {
  if (time > 0)
  cleanInterval = time;
  }
  /**
  * 取得自动清理客户记录的间隔时间
  *
  * @return 返回自动清理客户记录的间隔时间(毫秒)
  */
  public long getCleanInterval() {
  return cleanInterval;
  }
  /**
  * 取得客户记录
  *
  * @return 返回客户记录。格式为<客户标识,最近访问时间>
  */
  protected Hashtable<String, String> getGuests() {
  if (guests == null)
  guests = new Hashtable<String, String>();
  return guests;
  }
  /**
  * 输出错误信息
  *
  * @param err
  */
  public abstract void trace(String err);
  /**
  * 自动清除超时的客户端的线程
  *
  */
  private class AutoCleanThread extends Thread {
  public void run() {
  trace("AutoCleanThread thread start runing...");
  long interval = ONE_HOUR / 4L;
  if (getCleanInterval() > 0)
  interval = getCleanInterval();
  while (autoCleanThread == this && getGuests().size() > 0) {
  long time = System.currentTimeMillis()
  - ONE_HOUR / 2L;
  Enumeration<?> keys = getGuests().keys();
  while (keys.hasMoreElements()) {
  String key = (String) keys.nextElement();
  if (key != null) {
  long lasttime = Long.parseLong(getGuests()
  .get(key));
  if (time > lasttime)
  // 超时
  getGuests().remove(key);
  }// end if (key != null)
  }// end while (keys.hasMoreElements())
  try {
  Thread.sleep(interval);
  } catch (InterruptedException e) {
  e.printStackTrace();
  trace("error - " + e.toString());
  }
  }// end while (mobiles != null && mobiles.size() > 0)
  trace("AutoCleanThread thread end...");
  }
  }
  }
  /**
  * 通讯端口的客户端限制管理器的抽象类
  * 该类继承自GuestManager类,增加了connect()、disconnect()等方法
  *
  * @author none
  *
  */
  public abstract class PortGuestManager extends GuestManager {
  /**
  * 连接
  *
  * @return 返回是否连接成功
  */
  protected abstract boolean connect();
  /**
  * 断开
  *
  * @return 返回是否断开成功
  */
  protected abstract boolean disconnect();
  /**
  * 是否已经连接
  *
  * @return 返回端口是否已经连接
  */
  protected abstract boolean isConnected();
  public long login() {
  long guestid = -1L;
  if (!isConnected())
  connect();
  if (isConnected())
  guestid = super.login();
  return guestid;
  }
  public boolean limit(long guestid) {
  boolean flag = false;
  if (isConnected())
  flag = super.limit(guestid);
  return flag;
  }
  public void logout(long guestid) {
  super.logout(guestid);
  Hashtable<String, String> guests = getGuests();
  if (guests != null)
  if (guests.size() <= 0)
  disconnect();
  }
  public boolean isLimit(long guestid) {
  boolean flag = true;
  if (isConnected())
  flag = super.isLimit(guestid);
  return flag;
  }
  }

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训