001    package toolbus.communication;
002    
003    import aterm.ATerm;
004    
005    /**
006     * DataHandlers proces the data and supply the data for ioHandlers.
007     * 
008     * @author Arnold Lankamp
009     */
010    public interface IDataHandler{
011    
012            /**
013             * Associates an ioHandler with the data handler. Every data handler needs one to operate and it
014             * must NOT be changed during it's operation.
015             * 
016             * @param ioHandler
017             *            The I/O handler we need to associate with the data handler.
018             */
019            void setIOHandler(IIOHandler ioHandler);
020    
021            /**
022             * Forwards a term to the associated ioHandler.
023             * 
024             * @param operation
025             *            The operation associated with the term we need to send.
026             * @param aTerm
027             *            The term that needs to be transmitted.
028             */
029            void send(byte operation, ATerm aTerm);
030    
031            /**
032             * Receives a term from the associated ioHandler.
033             * 
034             * @param operation
035             *            The operation associate with the term we received.
036             * @param aTerm
037             *            The term that was received.
038             */
039            void receive(byte operation, ATerm aTerm);
040    
041            /**
042             * Requests the termination of this dataHandler.
043             */
044            void terminate();
045    
046            /**
047             * Shuts down this dataHandler. IMPORTANT: this method may only be called by the associated
048             * ioHandler. Manual invokation will lead to undefined behaviour.
049             */
050            void shutDown();
051            
052            /**
053             * Notifies the data handler that an exception has occured so it can take the necessary steps.
054             */
055            void exceptionOccured();
056    }