tidy code for easier maintenance

git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@432664 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Robert Davies 2006-08-18 18:02:49 +00:00
parent 36553b336d
commit bc005fd1e6
1 changed files with 41 additions and 25 deletions

View File

@ -77,27 +77,38 @@ public class VMTransport implements Transport,Task{
if(peer==null) if(peer==null)
throw new IOException("Peer not connected."); throw new IOException("Peer not connected.");
if(!peer.disposed){ if(!peer.disposed){
final TransportListener tl=peer.transportListener;
messageQueue=getMessageQueue(); if(async){
prePeerSetQueue=peer.prePeerSetQueue; asyncOneWay(command);
if(tl==null){
prePeerSetQueue.add(command);
}else if(!async){
tl.onCommand(command);
}else{ }else{
try{ syncOneWay(command);
messageQueue.put(command);
wakeup();
}catch(final InterruptedException e){
log.error("messageQueue interuppted",e);
throw new IOException(e.getMessage());
}
} }
}else{ }else{
throw new TransportDisposedIOException("Peer ("+peer.toString()+") disposed."); throw new TransportDisposedIOException("Peer ("+peer.toString()+") disposed.");
} }
} }
protected void syncOneWay(Command command){
final TransportListener tl=peer.transportListener;
prePeerSetQueue=peer.prePeerSetQueue;
if(tl==null){
prePeerSetQueue.add(command);
}else{
tl.onCommand(command);
}
}
protected void asyncOneWay(Command command) throws IOException{
messageQueue=getMessageQueue();
try{
messageQueue.put(command);
wakeup();
}catch(final InterruptedException e){
log.error("messageQueue interupted",e);
throw new IOException(e.getMessage());
}
}
public FutureResponse asyncRequest(Command command,ResponseCallback responseCallback) throws IOException{ public FutureResponse asyncRequest(Command command,ResponseCallback responseCallback) throws IOException{
throw new AssertionError("Unsupported Method"); throw new AssertionError("Unsupported Method");
} }
@ -117,18 +128,23 @@ public class VMTransport implements Transport,Task{
synchronized public void setTransportListener(TransportListener commandListener){ synchronized public void setTransportListener(TransportListener commandListener){
this.transportListener=commandListener; this.transportListener=commandListener;
wakeup(); wakeup();
peer.wakeup();
} }
public synchronized void start() throws Exception{ public synchronized void start() throws Exception{
started=true; started=true;
if(transportListener==null) if(transportListener==null)
throw new IOException("TransportListener not set."); throw new IOException("TransportListener not set.");
for(Iterator iter=prePeerSetQueue.iterator();iter.hasNext();){ if(!async){
Command command=(Command) iter.next(); for(Iterator iter=prePeerSetQueue.iterator();iter.hasNext();){
transportListener.onCommand(command); Command command=(Command) iter.next();
iter.remove(); transportListener.onCommand(command);
iter.remove();
}
}else{
wakeup();
peer.wakeup();
} }
wakeup();
} }
public void stop() throws Exception{ public void stop() throws Exception{
@ -176,14 +192,14 @@ public class VMTransport implements Transport,Task{
return null; return null;
} }
// task implementation /**
* @see org.apache.activemq.thread.Task#iterate()
*/
public boolean iterate(){ public boolean iterate(){
TransportListener tl=peer.transportListener; final TransportListener tl=peer.transportListener;
if(!messageQueue.isEmpty()&&!peer.disposed&&tl!=null){ if(!messageQueue.isEmpty()&&!peer.disposed&&tl!=null){
Command command=(Command) messageQueue.poll(); final Command command=(Command) messageQueue.poll();
if(tl!=null){ tl.onCommand(command);
tl.onCommand(command);
}
} }
return !messageQueue.isEmpty()&&!peer.disposed&&!(peer.transportListener==null); return !messageQueue.isEmpty()&&!peer.disposed&&!(peer.transportListener==null);
} }