📄 messagestore.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 + -