readingTask = null;
timeOut = null;
listeners.clear();
+ eventListeners.clear();
teachInListener = null;
errorListener = null;
}
long s = Long.parseLong(HexUtils.bytesToHex(senderId), 16);
- HashSet<PacketListener> pl = listeners.get(s);
- if (pl != null) {
- pl.forEach(l -> l.packetReceived(msg));
+ synchronized (this) {
+ HashSet<PacketListener> pl = listeners.get(s);
+ if (pl != null) {
+ pl.forEach(l -> l.packetReceived(msg));
+ }
}
}
} else {
}
}
- eventListeners.forEach(l -> l.eventReceived(event));
+ synchronized (this) {
+ eventListeners.forEach(l -> l.eventReceived(event));
+ }
}
} catch (Exception e) {
logger.error("Exception in informListeners", e);
protected abstract byte[] serializePacket(BasePacket packet) throws EnOceanException;
- public void addPacketListener(PacketListener listener, long senderIdToListenTo) {
+ public synchronized void addPacketListener(PacketListener listener, long senderIdToListenTo) {
if (listeners.computeIfAbsent(senderIdToListenTo, k -> new HashSet<>()).add(listener)) {
logger.debug("Listener added: {}", senderIdToListenTo);
}
}
- public void removePacketListener(PacketListener listener, long senderIdToListenTo) {
+ public synchronized void removePacketListener(PacketListener listener, long senderIdToListenTo) {
HashSet<PacketListener> pl = listeners.get(senderIdToListenTo);
if (pl != null) {
pl.remove(listener);
}
}
- public void addEventMessageListener(EventListener listener) {
+ public synchronized void addEventMessageListener(EventListener listener) {
eventListeners.add(listener);
}
- public void removeEventMessageListener(EventListener listener) {
+ public synchronized void removeEventMessageListener(EventListener listener) {
eventListeners.remove(listener);
}