套接字发出超时确认
我的
AckWithTimeOut
带有实现的自定义超时类
Ack
接口
public class AckWithTimeOut implements Ack {
private Timer timer;
private long timeOut = 0;
private boolean called = false;
public AckWithTimeOut() {
}
public AckWithTimeOut(long timeout_after) {
if (timeout_after <= 0)
return;
this.timeOut = timeout_after;
startTimer();
}
public void startTimer() {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
callback("No Ack");
}
}, timeOut);
}
public void resetTimer() {
if (timer != null) {
timer.cancel();
startTimer();
}
}
public void cancelTimer() {
if (timer != null)
timer.cancel();
}
void callback(Object... args) {
if (called) return;
called = true;
cancelTimer();
call(args);
}
@Override
public void call(Object... args) {
}
}
添加
确认超时
在套接字中发出侦听器
mSocket.emit("socketChangeDeviceAck", obj, new AckWithTimeOut(5000) {
@Override
public void call(Object... args) {
if(args!=null){
if(args[0].toString().equalsIgnoreCase("No Ack")){
Log.d("ACK_SOCKET","AckWithTimeOut : "+ args[0].toString());
}else if(args[0].toString().equalsIgnoreCase("true")){
cancelTimer(); //cancel timer if emit ACK return true
Log.d("ACK_SOCKET","AckWithTimeOut : "+ args[0].toString());
}
}
}
});