Normalized thread names (#9581)
Related to #8216 Signed-off-by: Hilbrand Bouwkamp <hilbrand@h72.nl>pull/9806/head
parent
79dfb43e42
commit
ac3f907b36
|
@ -130,7 +130,7 @@ public abstract class ADBridgeHandler extends BaseBridgeHandler {
|
||||||
|
|
||||||
protected void startMsgReader() {
|
protected void startMsgReader() {
|
||||||
synchronized (msgReaderThreadLock) {
|
synchronized (msgReaderThreadLock) {
|
||||||
Thread mrt = new Thread(this::readerThread, "AD Reader");
|
Thread mrt = new Thread(this::readerThread, "OH-binding-" + getThing().getUID() + "-ADReader");
|
||||||
mrt.setDaemon(true);
|
mrt.setDaemon(true);
|
||||||
mrt.start();
|
mrt.start();
|
||||||
msgReaderThread = mrt;
|
msgReaderThread = mrt;
|
||||||
|
|
|
@ -39,6 +39,10 @@ import org.slf4j.LoggerFactory;
|
||||||
public class SocketChannelSession implements SocketSession {
|
public class SocketChannelSession implements SocketSession {
|
||||||
private final Logger logger = LoggerFactory.getLogger(SocketChannelSession.class);
|
private final Logger logger = LoggerFactory.getLogger(SocketChannelSession.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The uid of the calling thing
|
||||||
|
*/
|
||||||
|
private final String uid;
|
||||||
/**
|
/**
|
||||||
* The host/ip address to connect to
|
* The host/ip address to connect to
|
||||||
*/
|
*/
|
||||||
|
@ -77,10 +81,11 @@ public class SocketChannelSession implements SocketSession {
|
||||||
/**
|
/**
|
||||||
* Creates the socket session from the given host and port
|
* Creates the socket session from the given host and port
|
||||||
*
|
*
|
||||||
|
* @param uid the thing uid of the calling thing
|
||||||
* @param host a non-null, non-empty host/ip address
|
* @param host a non-null, non-empty host/ip address
|
||||||
* @param port the port number between 1 and 65535
|
* @param port the port number between 1 and 65535
|
||||||
*/
|
*/
|
||||||
public SocketChannelSession(String host, int port) {
|
public SocketChannelSession(String uid, String host, int port) {
|
||||||
if (host == null || host.trim().length() == 0) {
|
if (host == null || host.trim().length() == 0) {
|
||||||
throw new IllegalArgumentException("Host cannot be null or empty");
|
throw new IllegalArgumentException("Host cannot be null or empty");
|
||||||
}
|
}
|
||||||
|
@ -88,6 +93,7 @@ public class SocketChannelSession implements SocketSession {
|
||||||
if (port < 1 || port > 65535) {
|
if (port < 1 || port > 65535) {
|
||||||
throw new IllegalArgumentException("Port must be between 1 and 65535");
|
throw new IllegalArgumentException("Port must be between 1 and 65535");
|
||||||
}
|
}
|
||||||
|
this.uid = uid;
|
||||||
this.host = host;
|
this.host = host;
|
||||||
this.port = port;
|
this.port = port;
|
||||||
}
|
}
|
||||||
|
@ -129,8 +135,12 @@ public class SocketChannelSession implements SocketSession {
|
||||||
}
|
}
|
||||||
|
|
||||||
socketChannel.set(channel);
|
socketChannel.set(channel);
|
||||||
new Thread(dispatcher).start();
|
Thread dispatcherThread = new Thread(dispatcher, "OH-binding-" + uid + "-dispatcher");
|
||||||
new Thread(responseReader).start();
|
dispatcherThread.setDaemon(true);
|
||||||
|
dispatcherThread.start();
|
||||||
|
Thread responseReaderThread = new Thread(responseReader, "OH-binding-" + uid + "-responseReader");
|
||||||
|
responseReaderThread.setDaemon(true);
|
||||||
|
responseReaderThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -449,7 +449,7 @@ public class AtlonaPro3Handler extends AtlonaHandler<AtlonaPro3Capabilities> {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
session = new SocketChannelSession(config.getIpAddress(), 23);
|
session = new SocketChannelSession(getThing().getUID().getAsString(), config.getIpAddress(), 23);
|
||||||
atlonaHandler = new AtlonaPro3PortocolHandler(session, config, getCapabilities(),
|
atlonaHandler = new AtlonaPro3PortocolHandler(session, config, getCapabilities(),
|
||||||
new StatefulHandlerCallback(new AtlonaHandlerCallback() {
|
new StatefulHandlerCallback(new AtlonaHandlerCallback() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -234,7 +234,8 @@ public class BlueGigaBridgeHandler extends AbstractBluetoothBridgeHandler<BlueGi
|
||||||
}, executor);
|
}, executor);
|
||||||
|
|
||||||
serialHandler = serialPortFuture
|
serialHandler = serialPortFuture
|
||||||
.thenApply(sp -> new BlueGigaSerialHandler(inputStream.get(), outputStream.get()));
|
.thenApply(sp -> new BlueGigaSerialHandler(getThing().getUID().getAsString(), inputStream.get(),
|
||||||
|
outputStream.get()));
|
||||||
transactionManager = serialHandler.thenApply(sh -> {
|
transactionManager = serialHandler.thenApply(sh -> {
|
||||||
BlueGigaTransactionManager th = new BlueGigaTransactionManager(sh, executor);
|
BlueGigaTransactionManager th = new BlueGigaTransactionManager(sh, executor);
|
||||||
sh.addHandlerListener(this);
|
sh.addHandlerListener(this);
|
||||||
|
|
|
@ -59,12 +59,12 @@ public class BlueGigaSerialHandler {
|
||||||
private final InputStream inputStream;
|
private final InputStream inputStream;
|
||||||
private final Thread parserThread;
|
private final Thread parserThread;
|
||||||
|
|
||||||
public BlueGigaSerialHandler(final InputStream inputStream, final OutputStream outputStream) {
|
public BlueGigaSerialHandler(final String uid, final InputStream inputStream, final OutputStream outputStream) {
|
||||||
this.outputStream = outputStream;
|
this.outputStream = outputStream;
|
||||||
this.inputStream = inputStream;
|
this.inputStream = inputStream;
|
||||||
|
|
||||||
flush();
|
flush();
|
||||||
parserThread = createBlueGigaBLEHandler();
|
parserThread = createBlueGigaBLEHandler(uid);
|
||||||
parserThread.setUncaughtExceptionHandler((t, th) -> {
|
parserThread.setUncaughtExceptionHandler((t, th) -> {
|
||||||
logger.warn("BluegigaSerialHandler terminating due to unhandled error", th);
|
logger.warn("BluegigaSerialHandler terminating due to unhandled error", th);
|
||||||
});
|
});
|
||||||
|
@ -323,7 +323,7 @@ public class BlueGigaSerialHandler {
|
||||||
logger.debug("BlueGiga BLE exited.");
|
logger.debug("BlueGiga BLE exited.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Thread createBlueGigaBLEHandler() {
|
private Thread createBlueGigaBLEHandler(String uid) {
|
||||||
return new Thread(this::inboundMessageHandlerLoop, "BlueGigaBLEHandler");
|
return new Thread(this::inboundMessageHandlerLoop, "OH-binding-" + uid + "-blueGigaBLEHandler");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,8 @@ public class CaddxCommunicator implements SerialPortEventListener {
|
||||||
private boolean unStuff = false;
|
private boolean unStuff = false;
|
||||||
private int tempAsciiByte = 0;
|
private int tempAsciiByte = 0;
|
||||||
|
|
||||||
public CaddxCommunicator(SerialPortManager portManager, CaddxProtocol protocol, String serialPortName, int baudRate)
|
public CaddxCommunicator(String uid, SerialPortManager portManager, CaddxProtocol protocol, String serialPortName,
|
||||||
|
int baudRate)
|
||||||
throws UnsupportedCommOperationException, PortInUseException, IOException, TooManyListenersException {
|
throws UnsupportedCommOperationException, PortInUseException, IOException, TooManyListenersException {
|
||||||
this.portManager = portManager;
|
this.portManager = portManager;
|
||||||
this.protocol = protocol;
|
this.protocol = protocol;
|
||||||
|
@ -101,7 +102,7 @@ public class CaddxCommunicator implements SerialPortEventListener {
|
||||||
serialPort.notifyOnDataAvailable(true);
|
serialPort.notifyOnDataAvailable(true);
|
||||||
serialPort.addEventListener(this);
|
serialPort.addEventListener(this);
|
||||||
|
|
||||||
communicator = new Thread(this::messageDispatchLoop, "Caddx Communicator");
|
communicator = new Thread(this::messageDispatchLoop, "OH-binding-" + uid + "-caddxCommunicator");
|
||||||
communicator.setDaemon(true);
|
communicator.setDaemon(true);
|
||||||
communicator.start();
|
communicator.start();
|
||||||
|
|
||||||
|
|
|
@ -128,7 +128,8 @@ public class CaddxBridgeHandler extends BaseBridgeHandler implements CaddxPanelL
|
||||||
protocol);
|
protocol);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
communicator = new CaddxCommunicator(portManager, protocol, serialPortName, baudRate);
|
communicator = new CaddxCommunicator(getThing().getUID().getAsString(), portManager, protocol,
|
||||||
|
serialPortName, baudRate);
|
||||||
} catch (IOException | TooManyListenersException | UnsupportedCommOperationException | PortInUseException e) {
|
} catch (IOException | TooManyListenersException | UnsupportedCommOperationException | PortInUseException e) {
|
||||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR,
|
||||||
"Communication cannot be initialized. " + e.toString());
|
"Communication cannot be initialized. " + e.toString());
|
||||||
|
|
|
@ -98,7 +98,8 @@ public class EnvisalinkBridgeHandler extends DSCAlarmBaseBridgeHandler {
|
||||||
tcpOutput = new OutputStreamWriter(tcpSocket.getOutputStream(), "US-ASCII");
|
tcpOutput = new OutputStreamWriter(tcpSocket.getOutputStream(), "US-ASCII");
|
||||||
tcpInput = new BufferedReader(new InputStreamReader(tcpSocket.getInputStream()));
|
tcpInput = new BufferedReader(new InputStreamReader(tcpSocket.getInputStream()));
|
||||||
|
|
||||||
Thread tcpListener = new Thread(new TCPListener());
|
Thread tcpListener = new Thread(new TCPListener(), "OH-binding-" + getThing().getUID() + "-tcplistener");
|
||||||
|
tcpListener.setDaemon(true);
|
||||||
tcpListener.start();
|
tcpListener.start();
|
||||||
|
|
||||||
setConnected(true);
|
setConnected(true);
|
||||||
|
|
|
@ -105,7 +105,8 @@ public class TCPServerBridgeHandler extends DSCAlarmBaseBridgeHandler {
|
||||||
tcpOutput = new OutputStreamWriter(tcpSocket.getOutputStream(), "US-ASCII");
|
tcpOutput = new OutputStreamWriter(tcpSocket.getOutputStream(), "US-ASCII");
|
||||||
tcpInput = new BufferedReader(new InputStreamReader(tcpSocket.getInputStream()));
|
tcpInput = new BufferedReader(new InputStreamReader(tcpSocket.getInputStream()));
|
||||||
|
|
||||||
Thread tcpListener = new Thread(new TCPListener());
|
Thread tcpListener = new Thread(new TCPListener(), "OH-binding-" + getThing().getUID() + "-tcplistener");
|
||||||
|
tcpListener.setDaemon(true);
|
||||||
tcpListener.start();
|
tcpListener.start();
|
||||||
|
|
||||||
setConnected(true);
|
setConnected(true);
|
||||||
|
|
|
@ -37,6 +37,7 @@ import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
import org.openhab.binding.harmonyhub.internal.HarmonyHubBindingConstants;
|
||||||
import org.openhab.binding.harmonyhub.internal.handler.HarmonyHubHandler;
|
import org.openhab.binding.harmonyhub.internal.handler.HarmonyHubHandler;
|
||||||
import org.openhab.core.config.discovery.AbstractDiscoveryService;
|
import org.openhab.core.config.discovery.AbstractDiscoveryService;
|
||||||
import org.openhab.core.config.discovery.DiscoveryResultBuilder;
|
import org.openhab.core.config.discovery.DiscoveryResultBuilder;
|
||||||
|
@ -222,7 +223,9 @@ public class HarmonyHubDiscoveryService extends AbstractDiscoveryService {
|
||||||
|
|
||||||
public void start() {
|
public void start() {
|
||||||
running = true;
|
running = true;
|
||||||
Thread localThread = new Thread(this::run, "HarmonyDiscoveryServer(tcp/" + getPort() + ")");
|
Thread localThread = new Thread(this::run,
|
||||||
|
"OH-binding-" + HarmonyHubBindingConstants.BINDING_ID + "discoveryServer");
|
||||||
|
localThread.setDaemon(true);
|
||||||
localThread.start();
|
localThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -249,7 +249,7 @@ public abstract class AbstractHomematicGateway implements RpcEventListener, Home
|
||||||
for (TransferMode mode : availableInterfaces.values()) {
|
for (TransferMode mode : availableInterfaces.values()) {
|
||||||
if (!rpcServers.containsKey(mode)) {
|
if (!rpcServers.containsKey(mode)) {
|
||||||
RpcServer rpcServer = mode == TransferMode.XML_RPC ? new XmlRpcServer(this, config)
|
RpcServer rpcServer = mode == TransferMode.XML_RPC ? new XmlRpcServer(this, config)
|
||||||
: new BinRpcServer(this, config);
|
: new BinRpcServer(this, config, id);
|
||||||
rpcServers.put(mode, rpcServer);
|
rpcServers.put(mode, rpcServer);
|
||||||
rpcServer.start();
|
rpcServer.start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ package org.openhab.binding.homematic.internal.communicator.server;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.openhab.binding.homematic.internal.HomematicBindingConstants;
|
||||||
import org.openhab.binding.homematic.internal.common.HomematicConfig;
|
import org.openhab.binding.homematic.internal.common.HomematicConfig;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -28,12 +29,14 @@ public class BinRpcServer implements RpcServer {
|
||||||
|
|
||||||
private Thread networkServiceThread;
|
private Thread networkServiceThread;
|
||||||
private BinRpcNetworkService networkService;
|
private BinRpcNetworkService networkService;
|
||||||
private HomematicConfig config;
|
private final HomematicConfig config;
|
||||||
private RpcEventListener listener;
|
private final RpcEventListener listener;
|
||||||
|
private final String id;
|
||||||
|
|
||||||
public BinRpcServer(RpcEventListener listener, HomematicConfig config) {
|
public BinRpcServer(RpcEventListener listener, HomematicConfig config, String id) {
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -42,7 +45,8 @@ public class BinRpcServer implements RpcServer {
|
||||||
|
|
||||||
networkService = new BinRpcNetworkService(listener, config);
|
networkService = new BinRpcNetworkService(listener, config);
|
||||||
networkServiceThread = new Thread(networkService);
|
networkServiceThread = new Thread(networkService);
|
||||||
networkServiceThread.setName("HomematicRpcServer");
|
networkServiceThread
|
||||||
|
.setName("OH-binding-" + HomematicBindingConstants.THING_TYPE_BRIDGE + ":" + id + "-rpcServer");
|
||||||
networkServiceThread.start();
|
networkServiceThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ import java.util.Queue;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
import org.openhab.binding.insteon.internal.InsteonBindingConstants;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -52,7 +53,7 @@ public class RequestQueueManager {
|
||||||
|
|
||||||
private void setParamsAndStart(@Nullable Thread thread) {
|
private void setParamsAndStart(@Nullable Thread thread) {
|
||||||
if (thread != null) {
|
if (thread != null) {
|
||||||
thread.setName("Insteon Request Queue Reader");
|
thread.setName("OH-binding-" + InsteonBindingConstants.BINDING_ID + "-requestQueueReader");
|
||||||
thread.setDaemon(true);
|
thread.setDaemon(true);
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import java.util.TreeSet;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
import org.openhab.binding.insteon.internal.InsteonBindingConstants;
|
||||||
import org.openhab.binding.insteon.internal.device.InsteonDevice;
|
import org.openhab.binding.insteon.internal.device.InsteonDevice;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -112,7 +113,7 @@ public class Poller {
|
||||||
|
|
||||||
private void setParamsAndStart(@Nullable Thread thread) {
|
private void setParamsAndStart(@Nullable Thread thread) {
|
||||||
if (thread != null) {
|
if (thread != null) {
|
||||||
thread.setName("Insteon Poll Queue Reader");
|
thread.setName("OH-binding-" + InsteonBindingConstants.BINDING_ID + "-pollQueueReader");
|
||||||
thread.setDaemon(true);
|
thread.setDaemon(true);
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -192,7 +192,7 @@ public class Port {
|
||||||
|
|
||||||
private void setParamsAndStart(@Nullable Thread thread, String type) {
|
private void setParamsAndStart(@Nullable Thread thread, String type) {
|
||||||
if (thread != null) {
|
if (thread != null) {
|
||||||
thread.setName("Insteon " + logName + " " + type);
|
thread.setName("OH-binding-Insteon " + logName + " " + type);
|
||||||
thread.setDaemon(true);
|
thread.setDaemon(true);
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import java.util.Base64;
|
||||||
|
|
||||||
import org.eclipse.jdt.annotation.NonNullByDefault;
|
import org.eclipse.jdt.annotation.NonNullByDefault;
|
||||||
import org.eclipse.jdt.annotation.Nullable;
|
import org.eclipse.jdt.annotation.Nullable;
|
||||||
|
import org.openhab.binding.insteon.internal.InsteonBindingConstants;
|
||||||
import org.openhab.binding.insteon.internal.driver.IOStream;
|
import org.openhab.binding.insteon.internal.driver.IOStream;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -102,7 +103,7 @@ public class HubIOStream extends IOStream implements Runnable {
|
||||||
|
|
||||||
private void setParamsAndStart(@Nullable Thread thread) {
|
private void setParamsAndStart(@Nullable Thread thread) {
|
||||||
if (thread != null) {
|
if (thread != null) {
|
||||||
thread.setName("Insteon Hub Poller");
|
thread.setName("OH-binding-" + InsteonBindingConstants.BINDING_ID + "-hubPoller");
|
||||||
thread.setDaemon(true);
|
thread.setDaemon(true);
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import java.util.Collections;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.openhab.binding.keba.internal.handler.KeContactHandler;
|
import org.openhab.binding.keba.internal.handler.KeContactHandler;
|
||||||
|
import org.openhab.binding.keba.internal.handler.KeContactTransceiver;
|
||||||
import org.openhab.core.thing.Thing;
|
import org.openhab.core.thing.Thing;
|
||||||
import org.openhab.core.thing.ThingTypeUID;
|
import org.openhab.core.thing.ThingTypeUID;
|
||||||
import org.openhab.core.thing.binding.BaseThingHandlerFactory;
|
import org.openhab.core.thing.binding.BaseThingHandlerFactory;
|
||||||
|
@ -36,6 +37,8 @@ public class KebaHandlerFactory extends BaseThingHandlerFactory {
|
||||||
|
|
||||||
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections.singleton(THING_TYPE_KECONTACTP20);
|
private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Collections.singleton(THING_TYPE_KECONTACTP20);
|
||||||
|
|
||||||
|
private final KeContactTransceiver transceiver = new KeContactTransceiver();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsThingType(ThingTypeUID thingTypeUID) {
|
public boolean supportsThingType(ThingTypeUID thingTypeUID) {
|
||||||
return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID);
|
return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID);
|
||||||
|
@ -46,7 +49,7 @@ public class KebaHandlerFactory extends BaseThingHandlerFactory {
|
||||||
ThingTypeUID thingTypeUID = thing.getThingTypeUID();
|
ThingTypeUID thingTypeUID = thing.getThingTypeUID();
|
||||||
|
|
||||||
if (thingTypeUID.equals(THING_TYPE_KECONTACTP20)) {
|
if (thingTypeUID.equals(THING_TYPE_KECONTACTP20)) {
|
||||||
return new KeContactHandler(thing);
|
return new KeContactHandler(thing, transceiver);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -74,10 +74,10 @@ public class KeContactHandler extends BaseThingHandler {
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(KeContactHandler.class);
|
private final Logger logger = LoggerFactory.getLogger(KeContactHandler.class);
|
||||||
|
|
||||||
protected JsonParser parser = new JsonParser();
|
protected final JsonParser parser = new JsonParser();
|
||||||
|
private final KeContactTransceiver transceiver;
|
||||||
|
|
||||||
private ScheduledFuture<?> pollingJob;
|
private ScheduledFuture<?> pollingJob;
|
||||||
private static KeContactTransceiver transceiver = new KeContactTransceiver();
|
|
||||||
private ExpiringCacheMap<String, ByteBuffer> cache;
|
private ExpiringCacheMap<String, ByteBuffer> cache;
|
||||||
|
|
||||||
private int maxPresetCurrent = 0;
|
private int maxPresetCurrent = 0;
|
||||||
|
@ -87,8 +87,9 @@ public class KeContactHandler extends BaseThingHandler {
|
||||||
private int lastState = -1; // trigger a report100 at startup
|
private int lastState = -1; // trigger a report100 at startup
|
||||||
private boolean isReport100needed = true;
|
private boolean isReport100needed = true;
|
||||||
|
|
||||||
public KeContactHandler(Thing thing) {
|
public KeContactHandler(Thing thing, KeContactTransceiver transceiver) {
|
||||||
super(thing);
|
super(thing);
|
||||||
|
this.transceiver = transceiver;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -106,7 +107,7 @@ public class KeContactHandler extends BaseThingHandler {
|
||||||
|
|
||||||
if (pollingJob == null || pollingJob.isCancelled()) {
|
if (pollingJob == null || pollingJob.isCancelled()) {
|
||||||
try {
|
try {
|
||||||
pollingJob = scheduler.scheduleWithFixedDelay(pollingRunnable, 0,
|
pollingJob = scheduler.scheduleWithFixedDelay(this::pollingRunnable, 0,
|
||||||
((BigDecimal) getConfig().get(POLLING_REFRESH_INTERVAL)).intValue(), TimeUnit.SECONDS);
|
((BigDecimal) getConfig().get(POLLING_REFRESH_INTERVAL)).intValue(), TimeUnit.SECONDS);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.NONE,
|
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.NONE,
|
||||||
|
@ -147,7 +148,7 @@ public class KeContactHandler extends BaseThingHandler {
|
||||||
return super.getConfig();
|
return super.getConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Runnable pollingRunnable = () -> {
|
private void pollingRunnable() {
|
||||||
try {
|
try {
|
||||||
long stamp = System.currentTimeMillis();
|
long stamp = System.currentTimeMillis();
|
||||||
if (!InetAddress.getByName(((String) getConfig().get(IP_ADDRESS))).isReachable(PING_TIME_OUT)) {
|
if (!InetAddress.getByName(((String) getConfig().get(IP_ADDRESS))).isReachable(PING_TIME_OUT)) {
|
||||||
|
@ -194,7 +195,7 @@ public class KeContactHandler extends BaseThingHandler {
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
logger.debug("Polling job has been interrupted for handler of thing '{}'.", getThing().getUID());
|
logger.debug("Polling job has been interrupted for handler of thing '{}'.", getThing().getUID());
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
protected void onData(ByteBuffer byteBuffer) {
|
protected void onData(ByteBuffer byteBuffer) {
|
||||||
String response = new String(byteBuffer.array(), 0, byteBuffer.limit());
|
String response = new String(byteBuffer.array(), 0, byteBuffer.limit());
|
||||||
|
|
|
@ -45,7 +45,7 @@ import org.slf4j.LoggerFactory;
|
||||||
* @author Karel Goderis - Initial contribution
|
* @author Karel Goderis - Initial contribution
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class KeContactTransceiver {
|
public class KeContactTransceiver {
|
||||||
|
|
||||||
public static final int LISTENER_PORT_NUMBER = 7090;
|
public static final int LISTENER_PORT_NUMBER = 7090;
|
||||||
public static final int REMOTE_PORT_NUMBER = 7090;
|
public static final int REMOTE_PORT_NUMBER = 7090;
|
||||||
|
@ -74,7 +74,7 @@ class KeContactTransceiver {
|
||||||
selector = Selector.open();
|
selector = Selector.open();
|
||||||
|
|
||||||
if (transceiverThread == null) {
|
if (transceiverThread == null) {
|
||||||
transceiverThread = new Thread(transceiverRunnable, "openHAB-Keba-Transceiver");
|
transceiverThread = new Thread(transceiverRunnable, "OH-binding-Keba-Transceiver");
|
||||||
transceiverThread.start();
|
transceiverThread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,11 +27,8 @@ class Utils {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Thread backgroundThread(Runnable r, String type, @Nullable Thing thing) {
|
static Thread backgroundThread(Runnable r, String type, @Nullable Thing thing) {
|
||||||
String name = "OH-binding-" + LinuxInputBindingConstants.BINDING_ID + "-" + type;
|
String id = thing == null ? LinuxInputBindingConstants.BINDING_ID : thing.getUID().getAsString();
|
||||||
if (thing != null) {
|
Thread t = new Thread(r, "OH-binding-" + id + "-" + type);
|
||||||
name += "-" + thing.getUID();
|
|
||||||
}
|
|
||||||
Thread t = new Thread(r, name);
|
|
||||||
t.setDaemon(true);
|
t.setDaemon(true);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class PrgBridgeHandler extends BaseBridgeHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
final PrgBridgeConfig config = getPrgBridgeConfig();
|
final PrgBridgeConfig config = getPrgBridgeConfig();
|
||||||
session = new SocketSession(config.getIpAddress(), 23);
|
session = new SocketSession(getThing().getUID().getAsString(), config.getIpAddress(), 23);
|
||||||
|
|
||||||
protocolHandler = new PrgProtocolHandler(session, new PrgHandlerCallback() {
|
protocolHandler = new PrgProtocolHandler(session, new PrgHandlerCallback() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -39,6 +39,10 @@ import org.slf4j.LoggerFactory;
|
||||||
public class SocketSession {
|
public class SocketSession {
|
||||||
private final Logger logger = LoggerFactory.getLogger(SocketSession.class);
|
private final Logger logger = LoggerFactory.getLogger(SocketSession.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The uid of the calling thing
|
||||||
|
*/
|
||||||
|
private final String uid;
|
||||||
/**
|
/**
|
||||||
* The host/ip address to connect to
|
* The host/ip address to connect to
|
||||||
*/
|
*/
|
||||||
|
@ -87,10 +91,11 @@ public class SocketSession {
|
||||||
/**
|
/**
|
||||||
* Creates the socket session from the given host and port
|
* Creates the socket session from the given host and port
|
||||||
*
|
*
|
||||||
|
* @param uid the thing uid of the calling thing
|
||||||
* @param host a non-null, non-empty host/ip address
|
* @param host a non-null, non-empty host/ip address
|
||||||
* @param port the port number between 1 and 65535
|
* @param port the port number between 1 and 65535
|
||||||
*/
|
*/
|
||||||
public SocketSession(String host, int port) {
|
public SocketSession(String uid, String host, int port) {
|
||||||
if (host == null || host.trim().length() == 0) {
|
if (host == null || host.trim().length() == 0) {
|
||||||
throw new IllegalArgumentException("Host cannot be null or empty");
|
throw new IllegalArgumentException("Host cannot be null or empty");
|
||||||
}
|
}
|
||||||
|
@ -98,6 +103,7 @@ public class SocketSession {
|
||||||
if (port < 1 || port > 65535) {
|
if (port < 1 || port > 65535) {
|
||||||
throw new IllegalArgumentException("Port must be between 1 and 65535");
|
throw new IllegalArgumentException("Port must be between 1 and 65535");
|
||||||
}
|
}
|
||||||
|
this.uid = uid;
|
||||||
this.host = host;
|
this.host = host;
|
||||||
this.port = port;
|
this.port = port;
|
||||||
}
|
}
|
||||||
|
@ -133,8 +139,8 @@ public class SocketSession {
|
||||||
writer = new PrintStream(client.getOutputStream());
|
writer = new PrintStream(client.getOutputStream());
|
||||||
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
|
||||||
|
|
||||||
new Thread(responseReader).start();
|
new Thread(responseReader, "OH-binding-" + uid + "-responseReader").start();
|
||||||
new Thread(dispatcher).start();
|
new Thread(dispatcher, "OH-binding-" + uid + "-dispatcher").start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue