Skip to content

Commit

Permalink
less backendMessages
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreKoepke committed Feb 22, 2025
1 parent e9c74fc commit 27671cf
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,19 @@
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;

@Data
public class SensorDto {

private String id;
private String name;

// some sensors change that value very often
// it causes a lot of websocket messages
@EqualsAndHashCode.Exclude
private ZonedDateTime lastUpdate;

private LocalDateTime presenceChangedAt;
private boolean reachable;
private boolean presence;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public abstract class AbstractBaseSocket {
abstract ObjectMapper getObjectMapper();

private final Map<String, Session> sessions = new ConcurrentHashMap<>();
private final Map<Session, Set<Integer>> sendHashCodes = new ConcurrentHashMap<>();
private final Map<String, Set<Integer>> sendHashCodes = new ConcurrentHashMap<>();

public void registerSession(Session session) {
sessions.put(session.getId(), session);
Expand All @@ -24,19 +24,22 @@ public void registerSession(Session session) {
@SneakyThrows
public void deregisterSession(String sessionId) {
sessions.remove(sessionId);
sendHashCodes.remove(sessionId);
}

public void broadcast(Object message) {
sessions.values().forEach(session -> sendMessage(session, message));
}

@SneakyThrows
public void sendMessage(Session session, Object message) {
sendHashCodes.putIfAbsent(session, new HashSet<>());
if (sendHashCodes.get(session).contains(message.hashCode())) {
public void sendMessage(String sessionId, Object message) {
var session = sessions.get(sessionId);

sendHashCodes.putIfAbsent(sessionId, new HashSet<>());
if (sendHashCodes.get(sessionId).contains(message.hashCode())) {
return;
}
sendHashCodes.getOrDefault(session, new HashSet<>()).add(message.hashCode());
sendHashCodes.getOrDefault(sessionId, new HashSet<>()).add(message.hashCode());

var payload = getObjectMapper().writeValueAsString(message);
session.getAsyncRemote().sendObject(payload, result -> {
Expand Down

0 comments on commit 27671cf

Please sign in to comment.