package org.deviceconnect.android.deviceplugin.awsiot.udt;
import android.util.Log;
import com.barchart.udt.SocketUDT;
import com.barchart.udt.net.NetSocketUDT;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
public class RelayClient {
private static final boolean DEBUG = false;
private static final String TAG = "UDT";
private OnRelayClientListener mOnRelayClientListener;
private NetSocketUDT mSocket;
private SocketTask mSocketTask;
private boolean mCloseFlag;
public void setOnRelayClientListener(final OnRelayClientListener listener) {
mOnRelayClientListener = listener;
}
public void connect(final String address, final int port) throws IOException {
mSocket = new NetSocketUDT();
mSocket.connect(new InetSocketAddress(address, port));
mSocketTask = new SocketTask(mSocket);
mSocketTask.setOnSocketTaskListener(mOnRelayClientListener);
Executors.newSingleThreadExecutor().submit(new Callable<Boolean>() {
@Override
public Boolean call() {
return mSocketTask.execute();
}
});
Executors.newSingleThreadExecutor().submit(new Callable<Boolean>() {
@Override
public Boolean call() {
return monitor(mSocket.socketUDT());
}
});
}
public void sendData(final byte[] data) throws IOException {
mSocketTask.sendData(data);
}
public void sendData(final byte[] data, final int length) throws IOException {
mSocketTask.sendData(data, length);
}
public void sendData(final byte[] data, final int offset, final int length) throws IOException {
mSocketTask.sendData(data, offset, length);
}
public void close() throws IOException {
if (DEBUG) {
Log.i(TAG, "RelayClient#close()");
}
mCloseFlag = true;
mSocket.close();
mOnRelayClientListener = null;
}
private boolean monitor(final SocketUDT socket) {
try {
while (!mCloseFlag) {
Thread.sleep(1000);
socket.updateMonitor(false);
}
return true;
} catch (Exception e) {
if (DEBUG) {
Log.w(TAG, "RelayClient#monitor", e);
}
return false;
}
}
public interface OnRelayClientListener extends SocketTask.OnSocketTaskListener {
}
}