package org.opennaas.extensions.transports.virtual; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PipedInputStream; import java.io.PipedOutputStream; import org.opennaas.core.resources.transport.IMessageTransport; import org.opennaas.core.resources.transport.IMessageTransportListener; import org.opennaas.core.resources.transport.IStreamTransport; import org.opennaas.core.resources.transport.TransportException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class VirtualTransport implements IStreamTransport, IMessageTransport { public static final String VIRTUAL = "Virtual"; private Logger logger = LoggerFactory.getLogger(VirtualTransport.class); private IVirtualTransportProvider virtualTransportProvider = null; private PipedInputStream inputStream = null; private PipedOutputStream outputStream = null; public VirtualTransport(IVirtualTransportProvider virtualTransportProvider) throws TransportException { this.virtualTransportProvider = virtualTransportProvider; if (this.virtualTransportProvider == null) { throw new TransportException("Could not find a VirtualTransportProvider for this virtual transport"); } outputStream = new PipedOutputStream(); try { inputStream = new PipedInputStream(outputStream); } catch (IOException ex) { ex.printStackTrace(); throw new TransportException(ex); } } public void connect() throws TransportException { logger.info("Virtual transport connected"); } public void disconnect() throws TransportException { logger.info("Virtual transport disconnected"); } public InputStream getInputStream() throws TransportException { return inputStream; } public OutputStream getOutputStream() throws TransportException { return outputStream; } public void send(byte[] message) throws TransportException { logger.debug("Sending message " + message); byte[] response = virtualTransportProvider.getStreamTransportReponse(message); try { outputStream.write(response); } catch (IOException ex) { ex.printStackTrace(); throw new TransportException(ex); } } public void send(char[] message) throws TransportException { byte[] request = new byte[message.length]; for (int i = 0; i < message.length; i++) { request[i] = (byte) message[i]; } logger.debug("Sending message " + request); byte[] response = virtualTransportProvider.getStreamTransportReponse(request); try { outputStream.write(response); } catch (IOException ex) { ex.printStackTrace(); throw new TransportException(ex); } } public Object sendMessage(Object message) { logger.debug("Virtual transport sending message " + message.toString()); return virtualTransportProvider.getMessageTransportResponse(message); } public void subscribe(IMessageTransportListener messageTransportListener) { logger.debug("Message transport listener added"); } public void unsubscribe(IMessageTransportListener messageTransoprtListener) { logger.debug("Message transport listener removed"); } }