package abs.fli.java.io; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; import FLI.SocketUtils.Socket_c; import FLI.StreamUtils.Feedback; import FLI.StreamUtils.Feedback_Error; import FLI.StreamUtils.Feedback_OK; import FLI.StreamUtils.InputStream_c; import FLI.StreamUtils.OutputStream_c; import abs.backend.java.lib.runtime.ABSAssertException; import abs.backend.java.lib.types.ABSBool; import abs.backend.java.lib.types.ABSInteger; import abs.backend.java.lib.types.ABSString; import abs.backend.java.lib.types.ABSUnit; import abs.fli.java.PrimitiveUtil; /** * * @author pwong * */ public class Socket extends Socket_c { private InputStream input; private OutputStream output; private final PrimitiveUtil putil = new PrimitiveUtil(); private java.net.Socket client_socket; public Socket() { super(); } void setSocket(java.net.Socket socket) { __ABS_init(); this.client_socket = socket; setupStream(); try { input.setStream(new DataInputStream(client_socket.getInputStream())); output.setStream(new DataOutputStream(client_socket.getOutputStream())); } catch (IOException e) { throw new ABSAssertException(e.getLocalizedMessage()); } } private void setupStream() { this.input = InputStream_c.createNewCOG(); this.output = OutputStream_c.createNewCOG(); } @Override public Feedback<ABSUnit> fli_connect(ABSString server, ABSInteger port, ABSInteger timeout) { try { client_socket = new java.net.Socket(); SocketAddress serverAddress = new InetSocketAddress(InetAddress.getByName(server.getString()), port.toInt()); client_socket.connect(serverAddress, timeout.toInt()); setupStream(); input.setStream(new DataInputStream(client_socket.getInputStream())); output.setStream(new DataOutputStream(client_socket.getOutputStream())); return new Feedback_OK<ABSUnit>(); } catch (Exception e) { e.printStackTrace(); return new Feedback_Error<ABSUnit>(putil.convert(e.getMessage())); } } @Override public FLI.StreamUtils.InputStream_i fli_getInputStream() { return input; } @Override public FLI.StreamUtils.OutputStream_i fli_getOutputStream() { return output; } @Override public Feedback<ABSUnit> fli_close() { try { client_socket.close(); return new Feedback_OK<ABSUnit>(); } catch (IOException e) { return new Feedback_Error<ABSUnit>(putil.convert(e.getMessage())); } } @Override public ABSBool fli_isConnected() { return putil.convert(client_socket.isConnected()); } }