mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 13:20:57 +00:00
prepare calling race status updates for live events
This commit is contained in:
1 parent
d7f1369cc7
commit
223b50b42e
1 file changed
+70
-56
+70
-56
@@ -32,22 +32,19 @@ public class EventActivity extends AbstractActivity {
|
||||
private final RegattaRaceStatesSettings raceStatesSettings;
|
||||
|
||||
private EventView view;
|
||||
private EventDTO event;
|
||||
|
||||
public EventActivity(EventPlace place, EventClientFactory clientFactory) {
|
||||
this.clientFactory = clientFactory;
|
||||
this.eventPlace = place;
|
||||
|
||||
this.view = null;
|
||||
this.event = null;
|
||||
|
||||
timerForClientServerOffset = new Timer(PlayModes.Replay);
|
||||
serverUpdateTimer = new Timer(PlayModes.Live, serverUpdateRateInMs);
|
||||
|
||||
raceStatesSettings = new RegattaRaceStatesSettings();
|
||||
serverUpdateTimer.addTimeListener(new TimeListener() {
|
||||
|
||||
@Override
|
||||
public void timeChanged(Date newTime, Date oldTime) {
|
||||
// loadAndUpdateEventRaceStatesLog();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -59,32 +56,7 @@ public class EventActivity extends AbstractActivity {
|
||||
clientFactory.getSailingService().getEventById(eventUUID, true, new AsyncCallback<EventDTO>() {
|
||||
@Override
|
||||
public void onSuccess(final EventDTO event) {
|
||||
if(event.getLeaderboardGroups().size() > 0) {
|
||||
clientFactory.getSailingService().getRegattaStructureOfEvent(event.id, new AsyncCallback<List<RaceGroupDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(List<RaceGroupDTO> raceGroups) {
|
||||
if(raceGroups.size() > 0) {
|
||||
for(LeaderboardGroupDTO leaderboardGroupDTO: event.getLeaderboardGroups()) {
|
||||
final long clientTimeWhenResponseWasReceived = System.currentTimeMillis();
|
||||
if (leaderboardGroupDTO.getAverageDelayToLiveInMillis() != null) {
|
||||
timerForClientServerOffset.setLivePlayDelayInMillis(leaderboardGroupDTO.getAverageDelayToLiveInMillis());
|
||||
}
|
||||
timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, leaderboardGroupDTO.getCurrentServerTime(), clientTimeWhenResponseWasReceived);
|
||||
}
|
||||
createEventView(event, raceGroups, panel);
|
||||
} else {
|
||||
createEventWithoutRegattasView(event, panel);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
createErrorView("Error while loading the regatta structure with service getRegattaStructureOfEvent()", caught, panel);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
createEventWithoutRegattasView(event, panel);
|
||||
}
|
||||
loadRegattaStructure(panel, clientTimeWhenRequestWasSent, event);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -94,6 +66,47 @@ public class EventActivity extends AbstractActivity {
|
||||
});
|
||||
}
|
||||
|
||||
private void loadRegattaStructure(final AcceptsOneWidget panel, final long clientTimeWhenRequestWasSent, final EventDTO event) {
|
||||
this.event = event;
|
||||
if(event.getLeaderboardGroups().size() > 0) {
|
||||
clientFactory.getSailingService().getRegattaStructureOfEvent(event.id, new AsyncCallback<List<RaceGroupDTO>>() {
|
||||
@Override
|
||||
public void onSuccess(List<RaceGroupDTO> raceGroups) {
|
||||
if(raceGroups.size() > 0) {
|
||||
for(LeaderboardGroupDTO leaderboardGroupDTO: event.getLeaderboardGroups()) {
|
||||
final long clientTimeWhenResponseWasReceived = System.currentTimeMillis();
|
||||
if (leaderboardGroupDTO.getAverageDelayToLiveInMillis() != null) {
|
||||
timerForClientServerOffset.setLivePlayDelayInMillis(leaderboardGroupDTO.getAverageDelayToLiveInMillis());
|
||||
}
|
||||
timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, leaderboardGroupDTO.getCurrentServerTime(), clientTimeWhenResponseWasReceived);
|
||||
}
|
||||
createEventView(event, raceGroups, panel);
|
||||
|
||||
if(event.isRunning()) {
|
||||
// create update time for race states only for running events
|
||||
serverUpdateTimer.addTimeListener(new TimeListener() {
|
||||
@Override
|
||||
public void timeChanged(Date newTime, Date oldTime) {
|
||||
loadAndUpdateEventRaceStatesLog();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
} else {
|
||||
createEventWithoutRegattasView(event, panel);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
createErrorView("Error while loading the regatta structure with service getRegattaStructureOfEvent()", caught, panel);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
createEventWithoutRegattasView(event, panel);
|
||||
}
|
||||
}
|
||||
|
||||
private void createErrorView(String errorMessage, Throwable errorReason, AcceptsOneWidget panel) {
|
||||
ErrorView view = clientFactory.createErrorView(errorMessage, errorReason);
|
||||
panel.setWidget(view.asWidget());
|
||||
@@ -111,31 +124,32 @@ public class EventActivity extends AbstractActivity {
|
||||
}
|
||||
|
||||
protected void loadAndUpdateEventRaceStatesLog() {
|
||||
final long clientTimeWhenRequestWasSent = System.currentTimeMillis();
|
||||
UUID eventUUID = UUID.fromString(eventPlace.getEventUuidAsString());
|
||||
if(view != null && event != null) {
|
||||
final long clientTimeWhenRequestWasSent = System.currentTimeMillis();
|
||||
|
||||
clientFactory.getSailingService().getRaceStateEntriesForRaceGroup(eventUUID, raceStatesSettings.getVisibleCourseAreas(),
|
||||
raceStatesSettings.getVisibleRegattas(), raceStatesSettings.isShowOnlyCurrentlyRunningRaces(), raceStatesSettings.isShowOnlyRacesOfSameDay(),
|
||||
new MarkedAsyncCallback<List<RegattaOverviewEntryDTO>>(
|
||||
new AsyncCallback<List<RegattaOverviewEntryDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable cause) {
|
||||
Window.setStatus("Error while loading the race states with service getRaceStateEntriesForRaceGroup()");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<RegattaOverviewEntryDTO> result) {
|
||||
final long clientTimeWhenResponseWasReceived = System.currentTimeMillis();
|
||||
Date serverTimeDuringRequest = null;
|
||||
for (RegattaOverviewEntryDTO entryDTO : result) {
|
||||
if (entryDTO.currentServerTime != null) {
|
||||
serverTimeDuringRequest = entryDTO.currentServerTime;
|
||||
}
|
||||
clientFactory.getSailingService().getRaceStateEntriesForRaceGroup(event.id, raceStatesSettings.getVisibleCourseAreas(),
|
||||
raceStatesSettings.getVisibleRegattas(), raceStatesSettings.isShowOnlyCurrentlyRunningRaces(), raceStatesSettings.isShowOnlyRacesOfSameDay(),
|
||||
new MarkedAsyncCallback<List<RegattaOverviewEntryDTO>>(
|
||||
new AsyncCallback<List<RegattaOverviewEntryDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable cause) {
|
||||
Window.setStatus("Error while loading the race states with service getRaceStateEntriesForRaceGroup()");
|
||||
}
|
||||
view.updateEventRaceStates(result);
|
||||
timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest, clientTimeWhenResponseWasReceived);
|
||||
}
|
||||
}));
|
||||
|
||||
@Override
|
||||
public void onSuccess(List<RegattaOverviewEntryDTO> result) {
|
||||
final long clientTimeWhenResponseWasReceived = System.currentTimeMillis();
|
||||
Date serverTimeDuringRequest = null;
|
||||
for (RegattaOverviewEntryDTO entryDTO : result) {
|
||||
if (entryDTO.currentServerTime != null) {
|
||||
serverTimeDuringRequest = entryDTO.currentServerTime;
|
||||
}
|
||||
}
|
||||
view.updateEventRaceStates(result);
|
||||
timerForClientServerOffset.adjustClientServerOffset(clientTimeWhenRequestWasSent, serverTimeDuringRequest, clientTimeWhenResponseWasReceived);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user