mirror of
https://github.com/danieldemus/openhab-addons
synced 2026-07-29 12:34:21 +02:00
[mercedesme] Message dumps (#18812)
* temporary file dumps enabled Signed-off-by: Bernd Weymann <bernd.weymann@gmail.com> * remove file writing Signed-off-by: Bernd Weymann <bernd.weymann@gmail.com> --------- Signed-off-by: Bernd Weymann <bernd.weymann@gmail.com>
This commit is contained in:
+9
-9
@@ -92,7 +92,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
|
||||
private String poiEndpoint = "/v1/vehicle/%s/route";
|
||||
|
||||
Optional<AuthService> authService = Optional.empty();
|
||||
final MBWebsocket ws;
|
||||
final MBWebsocket mbWebsocket;
|
||||
AccountConfiguration config = new AccountConfiguration();
|
||||
@Nullable
|
||||
ClientMessage message;
|
||||
@@ -102,7 +102,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
|
||||
super(bridge);
|
||||
discoveryService = mmds;
|
||||
httpClient = hc;
|
||||
ws = new MBWebsocket(this, hc);
|
||||
mbWebsocket = new MBWebsocket(this, hc);
|
||||
localeProvider = lp;
|
||||
storage = store.getStorage(Constants.BINDING_ID);
|
||||
}
|
||||
@@ -128,7 +128,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
|
||||
|
||||
public void refresh() {
|
||||
if (!Constants.NOT_SET.equals(authService.get().getToken())) {
|
||||
ws.run();
|
||||
mbWebsocket.run();
|
||||
} else {
|
||||
// all failed - start manual authorization
|
||||
String textKey = Constants.STATUS_TEXT_PREFIX + thing.getThingTypeUID().getId()
|
||||
@@ -160,7 +160,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
|
||||
schedule.cancel(true);
|
||||
}
|
||||
});
|
||||
ws.interrupt();
|
||||
mbWebsocket.dispose();
|
||||
eventQueue.clear();
|
||||
}
|
||||
|
||||
@@ -281,7 +281,7 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
|
||||
AcknowledgeVEPUpdatesByVIN ack = AcknowledgeVEPUpdatesByVIN.newBuilder()
|
||||
.setSequenceNumber(pm.getVepUpdates().getSequenceNumber()).build();
|
||||
ClientMessage cm = ClientMessage.newBuilder().setAcknowledgeVepUpdatesByVin(ack).build();
|
||||
ws.sendAcknowledgeMessage(cm);
|
||||
mbWebsocket.sendAcknowledgeMessage(cm);
|
||||
}
|
||||
} else if (pm.hasAssignedVehicles()) {
|
||||
for (int i = 0; i < pm.getAssignedVehicles().getVinsCount(); i++) {
|
||||
@@ -290,14 +290,14 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
|
||||
}
|
||||
AcknowledgeAssignedVehicles ack = AcknowledgeAssignedVehicles.newBuilder().build();
|
||||
ClientMessage cm = ClientMessage.newBuilder().setAcknowledgeAssignedVehicles(ack).build();
|
||||
ws.sendAcknowledgeMessage(cm);
|
||||
mbWebsocket.sendAcknowledgeMessage(cm);
|
||||
} else if (pm.hasApptwinCommandStatusUpdatesByVin()) {
|
||||
AppTwinCommandStatusUpdatesByVIN csubv = pm.getApptwinCommandStatusUpdatesByVin();
|
||||
commandStatusUpdate(csubv.getUpdatesByVinMap());
|
||||
AcknowledgeAppTwinCommandStatusUpdatesByVIN ack = AcknowledgeAppTwinCommandStatusUpdatesByVIN.newBuilder()
|
||||
.setSequenceNumber(csubv.getSequenceNumber()).build();
|
||||
ClientMessage cm = ClientMessage.newBuilder().setAcknowledgeApptwinCommandStatusUpdateByVin(ack).build();
|
||||
ws.sendAcknowledgeMessage(cm);
|
||||
mbWebsocket.sendAcknowledgeMessage(cm);
|
||||
} else if (pm.hasApptwinPendingCommandRequest()) {
|
||||
AppTwinPendingCommandsRequest pending = pm.getApptwinPendingCommandRequest();
|
||||
if (!pending.getAllFields().isEmpty()) {
|
||||
@@ -459,13 +459,13 @@ public class AccountHandler extends BaseBridgeHandler implements AccessTokenRefr
|
||||
|
||||
public void sendCommand(@Nullable ClientMessage cm) {
|
||||
if (cm != null) {
|
||||
ws.setCommand(cm);
|
||||
mbWebsocket.setCommand(cm);
|
||||
}
|
||||
scheduler.schedule(this::refresh, 2, TimeUnit.SECONDS);
|
||||
}
|
||||
|
||||
public void keepAlive(boolean b) {
|
||||
ws.keepAlive(b);
|
||||
mbWebsocket.keepAlive(b);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+18
-5
@@ -14,7 +14,6 @@ package org.openhab.binding.mercedesme.internal.server;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.time.Instant;
|
||||
@@ -102,7 +101,7 @@ public class MBWebsocket {
|
||||
// avoid unit test requesting real web socket - simply return
|
||||
return;
|
||||
}
|
||||
logger.trace("Websocket start {} max message size{}", websocketURL, client.getMaxBinaryMessageSize());
|
||||
logger.trace("Websocket start {} max message size {}", websocketURL, client.getMaxBinaryMessageSize());
|
||||
client.start();
|
||||
client.connect(this, new URI(websocketURL), request);
|
||||
while (keepAlive || Instant.now().isBefore(runTill)) {
|
||||
@@ -175,6 +174,13 @@ public class MBWebsocket {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If disposed temp debug files are deleted
|
||||
*/
|
||||
public void dispose() {
|
||||
interrupt();
|
||||
}
|
||||
|
||||
public void keepAlive(boolean b) {
|
||||
if (!keepAlive) {
|
||||
if (b) {
|
||||
@@ -196,14 +202,21 @@ public class MBWebsocket {
|
||||
*/
|
||||
|
||||
@OnWebSocketMessage
|
||||
public void onByteStream(InputStream is) {
|
||||
public void onByteArray(byte[] blob, int offset, int length) {
|
||||
try {
|
||||
PushMessage pm = VehicleEvents.PushMessage.parseFrom(is);
|
||||
byte[] message = blob;
|
||||
if (offset != 0) {
|
||||
int offsetLength = length - offset;
|
||||
message = new byte[offsetLength];
|
||||
System.arraycopy(blob, offset, message, 0, offsetLength);
|
||||
|
||||
}
|
||||
PushMessage pm = VehicleEvents.PushMessage.parseFrom(message);
|
||||
logger.trace("WebSocket - Message {}", pm.getMsgCase());
|
||||
accountHandler.enqueueMessage(pm);
|
||||
/**
|
||||
* https://community.openhab.org/t/mercedes-me/136866/12
|
||||
* Release Websocket thread as early as possible to avoid execeptions
|
||||
* Release Websocket thread as early as possible to avoid exceptions
|
||||
*
|
||||
* 1. Websocket thread responsible for reading stream into PushMessage and enqueue for
|
||||
* AccountHandler.
|
||||
|
||||
+1
-1
@@ -90,7 +90,7 @@ public class AccountHandlerMock extends AccountHandler {
|
||||
}
|
||||
|
||||
public void connect() {
|
||||
super.ws.onConnect(mock(Session.class));
|
||||
super.mbWebsocket.onConnect(mock(Session.class));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user