-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCommunicationService.java
More file actions
49 lines (41 loc) · 1.36 KB
/
Copy pathCommunicationService.java
File metadata and controls
49 lines (41 loc) · 1.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package devices.configuration.communication;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.util.function.Function;
import lombok.AllArgsConstructor;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
@AllArgsConstructor
public class CommunicationService {
private final Clock clock;
private final HeartbeatInterval intervals;
private final KnownDevices devices;
private final ApplicationEventPublisher publisher;
public BootResponse handleBoot(BootNotification boot) {
BootResponse response =
new BootResponse(
Instant.now(clock),
intervals.heartbeatIntervalFor(boot),
devices.queryDevice(boot.deviceId()));
publisher.publishEvent(boot);
return response;
}
public void handleStatus(DeviceStatuses status) {
publisher.publishEvent(status);
}
public record BootResponse(Instant serverTime, Duration interval, KnownDevices.State state) {
public <T> T map(Function<BootResponse, T> func) {
return func.apply(this);
}
public int intervalInSeconds() {
return (int) interval.getSeconds();
}
public <T> T state(Function<KnownDevices.State, T> func) {
return func.apply(state);
}
}
}