|
|
@ -55,17 +55,35 @@ public class DiConWebsocket implements DiDeviceConnection { |
|
|
|
synchronized public void call(DiCommandRequest request) { |
|
|
|
this.requests.add(request); |
|
|
|
|
|
|
|
// build cmd from request.parameter |
|
|
|
Charset charset = StandardCharsets.UTF_8; |
|
|
|
CharBuffer charBuffer = charset.decode(request.parameter); |
|
|
|
String cmd = charBuffer.toString(); |
|
|
|
var sendTimerTask = new TimerTask() { |
|
|
|
@Override |
|
|
|
public void run() { |
|
|
|
// build cmd from request.parameter |
|
|
|
Charset charset = StandardCharsets.UTF_8; |
|
|
|
CharBuffer charBuffer = charset.decode(request.parameter); |
|
|
|
String cmd = charBuffer.toString(); |
|
|
|
|
|
|
|
LOG.info("Command => {} : [{}]", request.parameterText, cmd); |
|
|
|
cmd = cmd.replace(" ",""); |
|
|
|
DiConWebsocket.this.setupRequestTimeoutTimer(request); |
|
|
|
|
|
|
|
var client = DiConWebsocket.this.client; |
|
|
|
if ( !client.isOpen() ) { |
|
|
|
try { |
|
|
|
client.wait(); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
throw new RuntimeException(e); |
|
|
|
} |
|
|
|
} |
|
|
|
client.send(cmd); |
|
|
|
} |
|
|
|
}; |
|
|
|
var sendTimer = new Timer(); |
|
|
|
sendTimer.schedule(sendTimerTask, 10); |
|
|
|
|
|
|
|
LOG.info("Command => {} : [{}]", request.parameterText, cmd); |
|
|
|
cmd = cmd.replace(" ",""); |
|
|
|
this.client.send(cmd); |
|
|
|
this.setupRequestTimeoutTimer(request); |
|
|
|
synchronized ( request ) { |
|
|
|
try { |
|
|
|
LOG.info("wait for response : mid = {}; hash={}", request.id, request.hashCode()); |
|
|
|
request.wait(); |
|
|
|
} catch (InterruptedException e) { |
|
|
|
throw new RuntimeException(e); |
|
|
@ -119,6 +137,8 @@ public class DiConWebsocket implements DiDeviceConnection { |
|
|
|
|
|
|
|
// handle on data |
|
|
|
public void handleOnText(String text) { |
|
|
|
LOG.info("HandleOnText : {}", text); |
|
|
|
|
|
|
|
ByteBuffer message = DiByteBuffer.fromHex(text); |
|
|
|
message.order(ByteOrder.LITTLE_ENDIAN); |
|
|
|
byte messageType = message.get(5); |
|
|
@ -133,6 +153,7 @@ public class DiConWebsocket implements DiDeviceConnection { |
|
|
|
|
|
|
|
// handle on data timeout for binary mode ack message |
|
|
|
private void handleOnTextAckMessage(ByteBuffer message) { |
|
|
|
LOG.info("HandleOnTextAckMessage : start ..."); |
|
|
|
short messageId = message.getShort(0); |
|
|
|
DiCommandRequest request = null; |
|
|
|
for ( DiCommandRequest requestItem : this.requests ) { |
|
|
@ -142,6 +163,7 @@ public class DiConWebsocket implements DiDeviceConnection { |
|
|
|
} |
|
|
|
} |
|
|
|
if ( null == request ) { |
|
|
|
LOG.info("HandleOnTextAckMessage : request not found. messageId={}", messageId); |
|
|
|
return ; // 可能是超时了, 已经被处理掉了 ~~~ |
|
|
|
} |
|
|
|
request.response = message; |
|
|
@ -151,7 +173,9 @@ public class DiConWebsocket implements DiDeviceConnection { |
|
|
|
request.timeoutTimer = null; |
|
|
|
} |
|
|
|
synchronized ( request ) { |
|
|
|
LOG.info("notify response : mid = {}; hash={}", request.id, request.hashCode()); |
|
|
|
request.notify(); |
|
|
|
} |
|
|
|
LOG.info("HandleOnTextAckMessage : End"); |
|
|
|
} |
|
|
|
} |