Update TamagotchiService.java
This commit is contained in:
parent
052e7c5793
commit
d70c27bb3b
1 changed files with 13 additions and 5 deletions
|
@ -26,9 +26,9 @@ public class TamagotchiService {
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
private static final Logger LOGGER = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||||
|
|
||||||
private final PublisherService publisherService;
|
private static final Map<String, Device> deviceRegistry = Collections.synchronizedMap(new HashMap<>());
|
||||||
|
|
||||||
private final Map<String, Device> deviceRegistry = Collections.synchronizedMap(new HashMap<>());
|
private final PublisherService publisherService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public TamagotchiService(PublisherService publisherService) {
|
public TamagotchiService(PublisherService publisherService) {
|
||||||
|
@ -54,8 +54,9 @@ public class TamagotchiService {
|
||||||
|
|
||||||
public void takeCare(String deviceId, Care care) {
|
public void takeCare(String deviceId, Care care) {
|
||||||
Device device = deviceRegistry.get(deviceId);
|
Device device = deviceRegistry.get(deviceId);
|
||||||
if (device == null)
|
if (device == null) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
device.changeHealthScore(care.getFeed());
|
device.changeHealthScore(care.getFeed());
|
||||||
device.changeHealthScore(care.getPet());
|
device.changeHealthScore(care.getPet());
|
||||||
}
|
}
|
||||||
|
@ -69,12 +70,19 @@ public class TamagotchiService {
|
||||||
.forEach(device -> {
|
.forEach(device -> {
|
||||||
while (device.getMessages().peek() != null) {
|
while (device.getMessages().peek() != null) {
|
||||||
try {
|
try {
|
||||||
publisherService.publish(device.getMessages().peek());
|
publisherService.publish(device.getMessages().poll());
|
||||||
device.getMessages().poll();
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
LOGGER.error("processing device events failed: {}", ex.getMessage());
|
LOGGER.error("processing device events failed: {}", ex.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// remove dead devices
|
||||||
|
deviceRegistry
|
||||||
|
.values()
|
||||||
|
.parallelStream()
|
||||||
|
.filter(device -> !device.isAlive())
|
||||||
|
.forEach(device -> deviceRegistry.remove(device.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue