prepare calling race status updates for live events

This commit is contained in:
fmittag committed 2014-08-13 19:11:05 +02:00
1 parent d7f1369cc7
commit 223b50b42e
1 file changed
+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);
}
}));
}
}
}