mirror of
https://github.com/davidalves04/Trabalho-Pratico-SD.git
synced 2025-12-08 20:43:32 +00:00
i might kms
This commit is contained in:
@@ -2,6 +2,7 @@ package sd.dashboard;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.util.Map;
|
||||
|
||||
import sd.model.MessageType;
|
||||
import sd.protocol.MessageProtocol;
|
||||
@@ -71,12 +72,22 @@ public class DashboardClientHandler implements Runnable {
|
||||
|
||||
System.out.println("[Handler] Received STATS_UPDATE from: " + senderId);
|
||||
|
||||
if (payload instanceof StatsUpdatePayload stats) {
|
||||
updateStatistics(senderId, stats);
|
||||
// Handle both direct StatsUpdatePayload and Gson-deserialized Map
|
||||
StatsUpdatePayload stats;
|
||||
if (payload instanceof StatsUpdatePayload) {
|
||||
stats = (StatsUpdatePayload) payload;
|
||||
} else if (payload instanceof java.util.Map) {
|
||||
// Gson deserialized as LinkedHashMap - re-serialize and deserialize properly
|
||||
com.google.gson.Gson gson = new com.google.gson.Gson();
|
||||
String json = gson.toJson(payload);
|
||||
stats = gson.fromJson(json, StatsUpdatePayload.class);
|
||||
} else {
|
||||
System.err.println("[Handler] Unknown payload type: " +
|
||||
(payload != null ? payload.getClass().getName() : "null"));
|
||||
return;
|
||||
}
|
||||
|
||||
updateStatistics(senderId, stats);
|
||||
}
|
||||
|
||||
private void updateStatistics(String senderId, StatsUpdatePayload stats) {
|
||||
@@ -88,14 +99,30 @@ public class DashboardClientHandler implements Runnable {
|
||||
statistics.updateVehiclesCompleted(stats.getTotalVehiclesCompleted());
|
||||
}
|
||||
|
||||
// Exit Node sends cumulative totals, so we SET rather than ADD
|
||||
if (stats.getTotalSystemTime() >= 0) {
|
||||
statistics.addSystemTime(stats.getTotalSystemTime());
|
||||
statistics.setTotalSystemTime(stats.getTotalSystemTime());
|
||||
}
|
||||
|
||||
if (stats.getTotalWaitingTime() >= 0) {
|
||||
statistics.addWaitingTime(stats.getTotalWaitingTime());
|
||||
statistics.setTotalWaitingTime(stats.getTotalWaitingTime());
|
||||
}
|
||||
|
||||
// Process vehicle type statistics (from Exit Node)
|
||||
if (stats.getVehicleTypeCounts() != null && !stats.getVehicleTypeCounts().isEmpty()) {
|
||||
Map<sd.model.VehicleType, Integer> counts = stats.getVehicleTypeCounts();
|
||||
Map<sd.model.VehicleType, Long> waitTimes = stats.getVehicleTypeWaitTimes();
|
||||
|
||||
for (var entry : counts.entrySet()) {
|
||||
sd.model.VehicleType type = entry.getKey();
|
||||
int count = entry.getValue();
|
||||
long waitTime = (waitTimes != null && waitTimes.containsKey(type))
|
||||
? waitTimes.get(type) : 0L;
|
||||
statistics.updateVehicleTypeStats(type, count, waitTime);
|
||||
}
|
||||
}
|
||||
|
||||
// Process intersection statistics (from Intersection processes)
|
||||
if (senderId.startsWith("Cr") || senderId.startsWith("E")) {
|
||||
statistics.updateIntersectionStats(
|
||||
senderId,
|
||||
|
||||
Reference in New Issue
Block a user