sige 1 year ago
parent
commit
a714bd0165
  1. 12
      src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConWebsocket.java
  2. 24
      src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConWebsocketClient.java

12
src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConWebsocket.java

@ -9,6 +9,9 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
@ -53,7 +56,12 @@ public class DiConWebsocket implements DiDeviceConnection {
@Override
public void call(DiCommandRequest request) {
this.requests.add(request);
String cmd = DiByteBuffer.toHex(request.parameter);
// 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(" ","");
this.client.send(cmd);
@ -88,7 +96,7 @@ public class DiConWebsocket implements DiDeviceConnection {
}
request.timeoutCount ++;
if ( request.timeoutCount > 3 ) {
if ( request.timeoutCount > 50 ) {
synchronized ( request ) {
request.timeoutTimer = null;
request.errorCode = 8000;

24
src/src/main/java/com/my/graphiteDigesterBg/diframe/connection/DiConWebsocketClient.java

@ -3,6 +3,8 @@ import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.ConnectException;
import java.net.URI;
public class DiConWebsocketClient extends WebSocketClient {
// logger
@ -37,12 +39,28 @@ public class DiConWebsocketClient extends WebSocketClient {
@Override
public void onClose(int i, String s, boolean b) {
LOG.info("close");
throw new RuntimeException("device connection closed");
LOG.error("device connection closed : ({}) {} ", i, s);
this.tryReconnect();
}
@Override
public void onError(Exception e) {
LOG.error("error", e);
LOG.error("device connection error : {}", e.getMessage());
if ( e instanceof ConnectException ) {
this.tryReconnect();
}
}
// reconnect
private void tryReconnect() {
new Thread(() -> {
try {
LOG.error("device reconnecting ... ");
Thread.sleep(1000);
this.reconnect();
} catch (InterruptedException e) {
LOG.error("device reconnect error : {} ", e.getMessage());
}
}).start();
}
}
Loading…
Cancel
Save