⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messagestore.java

📁 这是linux下ssl vpn的实现程序
💻 JAVA
字号:
/*
 * Created on 08-May-2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.maverick.multiplex;

import java.io.*;

/**
 * @author lee
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class MessageStore {

	  Message header = new Message();
	  public static final int NO_MESSAGES = -1;
	  Channel channel;
	  boolean closed = false;
	  MessageObserver stickyMessageObserver;

	  public MessageStore(Channel channel,
	                         MessageObserver stickyMessageObserver) {
	    this.channel = channel;
	    this.stickyMessageObserver = stickyMessageObserver;
	    header.next = header.previous = header;
	  }

	  /**
	   *
	   * @param messagefilter
	   * @return
	   * @throws IOException
	   * @throws InterruptedIOException
	   */
	  public Message nextMessage(MessageObserver observer) throws IOException,
	      EOFException {

	    try {

	      synchronized(header) {
		      Message msg = null;

		      while(msg==null) {

		      	  msg = hasMessage(observer);

			      if (msg != null) {
			        synchronized (header) {

			          if(stickyMessageObserver.wantsNotification(msg))
			              return msg;

			          remove(msg);
			          return msg;
			        }
			      }

			      header.wait(1000);
		      }
	      }
	    }
	    catch (InterruptedException ex) {
                ex.printStackTrace();
	    }

	    throw new EOFException("The required message could not be found in the message store");
	  }

	  public boolean isClosed() {
	    synchronized (header) {
	      return closed;
	    }
	  }

	  private void remove(Message e) {


	      if (e == header) {
	      	throw new IndexOutOfBoundsException();
	      }

	      e.previous.next = e.next;
	      e.next.previous = e.previous;
	  }

	  public Message hasMessage(MessageObserver observer) {

	    synchronized (header) {

	      if (header.next == null) {
	        return null;
	      }

	      for (Message e = header.next; e != header; e = e.next) {
	        if(observer.wantsNotification(e))
	           return e;
	      }

	      return null;

	    }
	  }



	  public void close() {

	    synchronized (header) {
	      closed = true;
	    }
	  }


	  void addMessage(Message msg) {
	      synchronized(header) {
	          msg.next = header;
	          msg.previous = header.previous;
	          msg.previous.next = msg;
	          msg.next.previous = msg;
	          header.notifyAll();
	      }
	  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -