package abs.fli.java.io;
import java.io.IOException;
import java.net.InetSocketAddress;
import FLI.SocketUtils.ServerSocket_c;
import FLI.SocketUtils.Socket_c;
import FLI.SocketUtils.Socket_i;
import FLI.StreamUtils.Feedback;
import FLI.StreamUtils.Feedback_Error;
import FLI.StreamUtils.Feedback_OK;
import FLI.StreamUtils.Feedback_Result;
import abs.backend.java.lib.types.ABSBool;
import abs.backend.java.lib.types.ABSInteger;
import abs.backend.java.lib.types.ABSUnit;
import abs.fli.java.PrimitiveUtil;
/**
*
* @author pwong
*
*/
public class ServerSocket extends ServerSocket_c {
private java.net.ServerSocket socket = null;
private PrimitiveUtil putil = new PrimitiveUtil();
@Override
public Feedback<ABSUnit> fli_bind(ABSInteger port) {
try {
socket = new java.net.ServerSocket();
socket.bind(new InetSocketAddress(port.toInt()));
return new Feedback_OK<ABSUnit>();
} catch (Exception e) {
return new Feedback_Error<ABSUnit>(putil.convert(e.getMessage()));
}
}
@Override
public Feedback<ABSUnit> fli_setSoTimeout(ABSInteger timeout){
try {
socket.setSoTimeout(timeout.toInt());
return new Feedback_OK<ABSUnit>();
} catch (IOException e) {
return new Feedback_Error<ABSUnit>(putil.convert(e.getMessage()));
}
}
@Override
public Feedback<Socket_i> fli_accept() {
try {
java.net.Socket s = socket.accept();
Socket fli_s = Socket_c.createNewCOG();
fli_s.setSocket(s);
return new Feedback_Result<Socket_i>(fli_s);
} catch (IOException e) {
return new Feedback_Error<Socket_i>(putil.convert(e.getMessage()));
}
}
@Override
public ABSBool fli_isClosed() {
return putil.convert(socket.isClosed());
}
}