All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ca.uhn.hl7v2.protocol.impl.SocketStreamSource Maven / Gradle / Ivy

/*
 * Created on 15-Apr-2004
 */
package ca.uhn.hl7v2.protocol.impl;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

import ca.uhn.hl7v2.protocol.StreamSource;
import ca.uhn.hl7v2.protocol.TransportException;

/**
 * A base implementation of StreamSource based on sockets. 
 *  
 * @author Bryan Tripp
 * @version $Revision: 1.1 $ updated on $Date: 2007-02-19 02:24:26 $ by $Author: jamesagnew $
 */
public abstract class SocketStreamSource implements StreamSource {
    
    /**
     * @return a socket from which input and output streams for message exchages 
     *      are to be obtained    
     */
    public abstract Socket getSocket();
    
    /** 
     * Gets fresh instance of socket, which is subsequently available 
     * from getSocket().  
     */
    public abstract void connect() throws TransportException;

    /**
     * Closes streams and underlying socket. 
     * @see ca.uhn.hl7v2.protocol.StreamSource#disconnect()
     */
    public void disconnect() throws TransportException {
        try {
            if (isConnected()) {
                getOutboundStream().close();
                getInboundStream().close();
                getSocket().close();
            }            
        } catch (IOException e) {
            throw new TransportException(e);
        }
    }
    
    /**
     * @return the stream to which we write outbound messages.   
     */
    public OutputStream getOutboundStream() throws TransportException {
        checkConnected();
        try {
            return getSocket().getOutputStream();
        } catch (IOException e) {
            throw new TransportException(e); 
        }
    }
    
    private void checkConnected() throws TransportException {
        if (!isConnected()) {
            throw new TransportException("The socket is not connected");
        }
    }
    
    private boolean isConnected() {
        boolean is = false;
        if (getSocket() != null && getSocket().isConnected() && !getSocket().isClosed()) {
            is = true;
        }
        return is;
    }

    /**
     * @return the stream to which we expect the remote server to send messages.  
     */
    public InputStream getInboundStream() throws TransportException {
        checkConnected();
        try {
            return getSocket().getInputStream();
        } catch (IOException e) {
            throw new TransportException(e); 
        }
    }
    
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy