Skip to content

Commit

Permalink
meetings now are removed after the end
Browse files Browse the repository at this point in the history
  • Loading branch information
jthomerson committed May 1, 2010
1 parent 2b45b1a commit 415b1ac
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 7 deletions.
7 changes: 4 additions & 3 deletions src/main/java/com/genericconf/bbbgateway/TimerSettings.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -35,14 +35,15 @@ private boolean isDev() {
// NOTE: these will only be called before app is started, resulting in non-dev values always // NOTE: these will only be called before app is started, resulting in non-dev values always
public int getSecondsBetweenMeetingUpdateRuns() { return isDev() ? 15 : 45; } public int getSecondsBetweenMeetingUpdateRuns() { return isDev() ? 15 : 45; }
public int getSecondsBeforeFirstMeetingUpdateRun() { return isDev() ? 15 : 45; } public int getSecondsBeforeFirstMeetingUpdateRun() { return isDev() ? 15 : 45; }
public int getSecondsBeforeMeetingIsRemovedAfterEnding() { return 15 * 60; } /* 15 minutes */


// ManageMeeting page: // ManageMeeting page:
public int getSecondsBetweenManageMeetingPagePolls() { return isDev() ? 15 : 30; } public int getSecondsBetweenManageMeetingPagePolls() { return isDev() ? 5 : 20; }


// WaitingRoom page: // WaitingRoom page:
public int getSecondsBetweenWaitingRoomPagePolls() { return isDev() ? 10 : 90; } public int getSecondsBetweenWaitingRoomPagePolls() { return isDev() ? 5 : 20; }
public int getSecondsBeforeFirstWaitingRoomPagePoll() { return isDev() ? 2 : 2; } public int getSecondsBeforeFirstWaitingRoomPagePoll() { return isDev() ? 2 : 2; }
public int getSecondsWithNoPingThatIndicatesTimeOut() { return isDev() ? 30 : 210; } public int getSecondsWithNoPingThatIndicatesTimeOut() { return isDev() ? 15 : 90; }


// HomePage : // HomePage :
public int getSecondsBetweenHomePagePolls() { return getSecondsBetweenWaitingRoomPagePolls(); } public int getSecondsBetweenHomePagePolls() { return getSecondsBetweenWaitingRoomPagePolls(); }
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/genericconf/bbbgateway/domain/Meeting.java
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -23,10 +23,15 @@
import java.util.Map; import java.util.Map;


import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.RandomStringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.genericconf.bbbgateway.TimerSettings;


public class Meeting extends Entity { public class Meeting extends Entity {


private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(Meeting.class);


private Server server; private Server server;


Expand Down Expand Up @@ -290,4 +295,16 @@ public void removeAttendee(Attendee att) {
waiters.remove(att.getName()); waiters.remove(att.getName());
} }


public boolean isTimedOut() {
if (startTime != null && endTime != null) {
long ended = endTime.getTime();
final int elapsed = (int) ((System.currentTimeMillis() - ended) / 1000);
final boolean timedOut = elapsed > TimerSettings.INSTANCE.getSecondsBeforeMeetingIsRemovedAfterEnding();
logger.debug("meeting: {}, ended: {}, elapsed: {}, threshold: {}, timed out: {}", new Object[] { name, ended, elapsed, TimerSettings.INSTANCE.getSecondsBeforeMeetingIsRemovedAfterEnding(), timedOut });
return timedOut;
}
logger.debug("meeting not timed out because it hasn't started and ended");
return false;
}

} }
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ boolean doExecute() throws Exception {
Date end = (Date) xml.get("endTime"); Date end = (Date) xml.get("endTime");
boolean running = (Boolean) xml.get("running"); boolean running = (Boolean) xml.get("running");
meeting.setStartTime(start); meeting.setStartTime(start);
meeting.setEndTime(end);
logger.info("meeting [{}] start: {}; end: {}; running: {}", new Object[] { meeting.getMeetingID(), start, end, running }); logger.info("meeting [{}] start: {}; end: {}; running: {}", new Object[] { meeting.getMeetingID(), start, end, running });


List<Attendee> atts = (List<Attendee>) xml.get("attendees"); List<Attendee> atts = (List<Attendee>) xml.get("attendees");
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -49,8 +49,20 @@ public MeetingService() {
@Override @Override
public void run() { public void run() {
logger.info("update meetings timer task running"); logger.info("update meetings timer task running");
for (Meeting meeting : meetings.values()) { Set<Meeting> toRemove = new HashSet<Meeting>();
for (Meeting meeting : new HashSet<Meeting>(meetings.values())) {
tryToUpdateMeeting(meeting); tryToUpdateMeeting(meeting);
// now allow new ones to join if some have dropped off:
bulkAllowAttendees(meeting);
if (meeting.isTimedOut()) {
toRemove.add(meeting);
}
}
logger.info("meetings to remove: " + toRemove);
synchronized(meetings) {
for (Meeting rem : toRemove) {
meetings.remove(rem.getMeetingID());
}
} }
} }
}; };
Expand All @@ -72,6 +84,7 @@ public void bulkAllowAttendees(Meeting meeting) {
Collections.sort(waiters); Collections.sort(waiters);
waiters = waiters.subList(0, Math.min(waiters.size(), allowIn)); waiters = waiters.subList(0, Math.min(waiters.size(), allowIn));
for (Attendee att : waiters) { for (Attendee att : waiters) {
logger.debug("allowing {} to join", new Object[] { att });
att.setAllowedToJoin(true); att.setAllowedToJoin(true);
} }
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.apache.wicket.PageParameters; import org.apache.wicket.PageParameters;
import org.apache.wicket.ajax.AbstractAjaxTimerBehavior; import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.SimpleAttributeModifier; import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.WebMarkupContainer;
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -62,14 +62,19 @@ public ManageMeeting(PageParameters params) {
logger.info("meeting ID: " + meetingID + "; check: " + check + "; okay: " + okay); logger.info("meeting ID: " + meetingID + "; check: " + check + "; okay: " + okay);
if (!okay) { if (!okay) {
getSession().error("You are not authorized to manage that meeting"); getSession().error("You are not authorized to manage that meeting");
throw new RestartResponseAtInterceptPageException(HomePage.class); throw new RestartResponseAtInterceptPageException(getApplication().getHomePage());
} }
IModel<Meeting> model = new LoadableDetachableModel<Meeting>() { IModel<Meeting> model = new LoadableDetachableModel<Meeting>() {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;


@Override @Override
protected Meeting load() { protected Meeting load() {
return meetingService.findByMeetingID(meetingID); final Meeting mtg = meetingService.findByMeetingID(meetingID);
if (mtg == null) {
getSession().error("That meeting no longer exists");
throw new RestartResponseAtInterceptPageException(getApplication().getHomePage());
}
return mtg;
} }
}; };
setDefaultModel(new CompoundPropertyModel<Meeting>(model)); setDefaultModel(new CompoundPropertyModel<Meeting>(model));
Expand Down

0 comments on commit 415b1ac

Please sign in to comment.