i might kms

This commit is contained in:
2025-11-22 00:13:19 +00:00
parent ecb70fa6a2
commit 6fdcf376b2
14 changed files with 929 additions and 72 deletions

View File

@@ -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,