001 package toolbus.communication;
002
003 import aterm.ATerm;
004
005 /**
006 * This class enables direct communication (through java method calls) between a client and a
007 * server, under the condition that they are running the the same VM. This class does nothing fancy,
008 * it just passes messages between the data handler and its I/O handler counter part.
009 *
010 * @author Arnold Lankamp
011 */
012 public class DirectIOHandler implements IIOHandler{
013 private final IDataHandler dataHandler;
014 private volatile DirectIOHandler directIOHandler = null;
015
016 /**
017 * Constructor.
018 *
019 * @param dataHandler
020 * The data handler this I/O handler is associated with.
021 */
022 public DirectIOHandler(IDataHandler dataHandler){
023 super();
024
025 this.dataHandler = dataHandler;
026 }
027
028 /**
029 * Links this I/O handler with its counter part.
030 *
031 * @param directIOHandler
032 * The counter part of this I/O handler.
033 */
034 public void setDirectIOHandler(DirectIOHandler directIOHandler){
035 this.directIOHandler = directIOHandler;
036 }
037
038 /**
039 * @see IIOHandler#receive(byte, ATerm)
040 */
041 public void receive(byte operation, ATerm aTerm){
042 dataHandler.receive(operation, aTerm);
043 }
044
045 /**
046 * @see IIOHandler#send(byte, ATerm)
047 */
048 public void send(byte operation, ATerm aTerm){
049 directIOHandler.receive(operation, aTerm);
050 }
051
052 /**
053 * @see IIOHandler#terminate()
054 */
055 public void terminate(){
056 directIOHandler.shutDown();
057 }
058
059 /**
060 * @see IIOHandler#shutDown()
061 */
062 public void shutDown(){
063 dataHandler.shutDown();
064 }
065
066 /**
067 * @see IIOHandler#exceptionOccured()
068 */
069 public void exceptionOccured(){
070 dataHandler.exceptionOccured();
071 }
072 }