[virtualcommons-svn] SF.net SVN: virtualcommons:[292] irrigation/trunk/src/main/java/edu/asu/ commo
Status: Beta
Brought to you by:
alllee
From: <al...@us...> - 2009-10-10 01:16:40
|
Revision: 292 http://virtualcommons.svn.sourceforge.net/virtualcommons/?rev=292&view=rev Author: alllee Date: 2009-10-10 01:16:33 +0000 (Sat, 10 Oct 2009) Log Message: ----------- minor hygiene, tracking down connection event errors when a client disconnects. Modified Paths: -------------- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/ServerConfiguration.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/facilitator/Facilitator.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/GroupDataModel.java irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/ServerConfiguration.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/ServerConfiguration.java 2009-10-09 06:26:41 UTC (rev 291) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/conf/ServerConfiguration.java 2009-10-10 01:16:33 UTC (rev 292) @@ -141,9 +141,7 @@ // } public boolean isUndisruptedBandwidth(){ - if(assistant.getBooleanProperty("undisrupted-bandwidth")== true) - return true; - return false; + return assistant.getBooleanProperty("undisruptedBandwidth", false); } public double getShowUpPayment() { Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/facilitator/Facilitator.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/facilitator/Facilitator.java 2009-10-09 06:26:41 UTC (rev 291) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/facilitator/Facilitator.java 2009-10-10 01:16:33 UTC (rev 292) @@ -29,34 +29,34 @@ */ public class Facilitator { - private final static Facilitator INSTANCE = new Facilitator(); - - private Identifier id; // @jve:decl-index=0: + private final static Facilitator INSTANCE = new Facilitator(); - private ClientDispatcher dispatcher; - - private ServerConfiguration configuration; - - private ServerDataModel serverGameState; // @jve:decl-index=0: - - private FacilitatorWindow irrigationFacilitatorWindow; - - private boolean stopExperiment = false; - - private boolean experimentRunning = false; - + private Identifier id; // @jve:decl-index=0: + + private ClientDispatcher dispatcher; + + private ServerConfiguration configuration; + + private ServerDataModel serverGameState; // @jve:decl-index=0: + + private FacilitatorWindow irrigationFacilitatorWindow; + + private boolean stopExperiment = false; + + private boolean experimentRunning = false; + private final EventTypeChannel channel = new EventTypeChannel(); - - private Facilitator() { + + private Facilitator() { this(new ServerConfiguration()); } - + public Facilitator(ServerConfiguration configuration) { dispatcher = DispatcherFactory.getInstance().createClientDispatcher(channel); setConfiguration(configuration); initializeEventProcessors(); } - + @SuppressWarnings("unchecked") private void initializeEventProcessors() { channel.add(new EventTypeProcessor<ConfigurationEvent>(ConfigurationEvent.class) { @@ -66,7 +66,7 @@ }); channel.add(new EventTypeProcessor<FacilitatorEndRoundEvent>(FacilitatorEndRoundEvent.class) { public void handle(FacilitatorEndRoundEvent event) { -// serverGameState = null; + // serverGameState = null; irrigationFacilitatorWindow.endRound(event); configuration.nextRound(); } @@ -76,7 +76,7 @@ public static Facilitator getInstance(){ return INSTANCE; } - + public void setConfiguration(ServerConfiguration configuration) { if (configuration == null) { System.err.println("attempt to setConfiguration with null, ignoring"); @@ -86,11 +86,11 @@ this.configuration = configuration; } } - - /** - * @param args - */ - + + /** + * @param args + */ + /* * Connects facilitator to the server and registers with the server as a facilitator. * @@ -101,124 +101,118 @@ public void connect() { connect(configuration.getServerAddress()); } - + public void connect(InetSocketAddress address) { id = dispatcher.connect(address); if (id != null) { - transmit(new FacilitatorRegistrationRequest(id)); + transmit(new FacilitatorRegistrationRequest(id)); } - + } - + void createFacilitatorWindow(Dimension dimension) { irrigationFacilitatorWindow = new FacilitatorWindow(dimension, this); - //if (id == null) { - // configure for unconnected functionality - // facilitatorWindow.configureForReplay(); - //} } - + /* * Sends requests to the server */ public void transmit(Event event) { dispatcher.transmit(event); } - + public static void main(String[] args) { - - Runnable createGuiRunnable = new Runnable(){ - public void run() { - // TODO Auto-generated method stub - Dimension dimension = new Dimension(500, 600); - Facilitator facilitator = Facilitator.getInstance(); - facilitator.connect(); - JFrame frame = new JFrame(); - frame.setTitle("Facilitator window: " + facilitator.id); - frame.setSize((int) dimension.getWidth(), (int) dimension.getHeight()); - facilitator.createFacilitatorWindow(dimension); - frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - frame.getContentPane().add(facilitator.getFacilitatorWindow()); - frame.setVisible(true); + Runnable createGuiRunnable = new Runnable(){ + public void run() { + Dimension dimension = new Dimension(500, 600); + Facilitator facilitator = Facilitator.getInstance(); + facilitator.connect(); + JFrame frame = new JFrame(); + frame.setTitle("Facilitator window: " + facilitator.id); + frame.setSize((int) dimension.getWidth(), (int) dimension.getHeight()); + facilitator.createFacilitatorWindow(dimension); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.getContentPane().add(facilitator.getFacilitatorWindow()); + frame.setVisible(true); } - }; - SwingUtilities.invokeLater(createGuiRunnable); - } + }; + SwingUtilities.invokeLater(createGuiRunnable); + } - public void accept(Identifier id, Object event) { - // TODO Auto-generated method stub - if (event instanceof ConfigurationEvent) { - ConfigurationEvent configEvent = (ConfigurationEvent) event; - setConfiguration((ServerConfiguration)configEvent.getConfiguration()); - } - else if(event instanceof ServerGameStateEvent){ - ServerGameStateEvent serverGameStateEvent = (ServerGameStateEvent)event; - if (!stopExperiment) { - if (serverGameState == null) { - System.err.println("about to display game.."); - experimentRunning = true; - // FIXME: could use configuration from this event... serverGameStateEvent.getServerGameState().getConfiguration(); - serverGameState = serverGameStateEvent.getServerGameState(); - /** - * Here I need to display Game..this goes to the facilitator window. - */ - //facilitatorWindow.displayGame(); - } - else { - // synchronous updates - serverGameState = serverGameStateEvent.getServerGameState(); - } - } - //facilitatorWindow.updateWindow(serverGameStateEvent.getTimeLeft()); - } - else if (event instanceof FacilitatorEndRoundEvent){ - FacilitatorEndRoundEvent endRoundEvent = (FacilitatorEndRoundEvent)event; - serverGameState = null; - /** - * This method goes to facilitator widow. - */ - //facilitatorWindow.endRound(endRoundEvent); - } - - } + // public void accept(Identifier id, Object event) { + // // TODO Auto-generated method stub + // if (event instanceof ConfigurationEvent) { + // ConfigurationEvent configEvent = (ConfigurationEvent) event; + // setConfiguration((ServerConfiguration)configEvent.getConfiguration()); + // } + // else if(event instanceof ServerGameStateEvent){ + // ServerGameStateEvent serverGameStateEvent = (ServerGameStateEvent)event; + // if (!stopExperiment) { + // if (serverGameState == null) { + // System.err.println("about to display game.."); + // experimentRunning = true; + // // FIXME: could use configuration from this event... serverGameStateEvent.getServerGameState().getConfiguration(); + // serverGameState = serverGameStateEvent.getServerGameState(); + // /** + // * Here I need to display Game..this goes to the facilitator window. + // */ + // //facilitatorWindow.displayGame(); + // } + // else { + // // synchronous updates + // serverGameState = serverGameStateEvent.getServerGameState(); + // } + // } + // //facilitatorWindow.updateWindow(serverGameStateEvent.getTimeLeft()); + // } + // else if (event instanceof FacilitatorEndRoundEvent){ + // FacilitatorEndRoundEvent endRoundEvent = (FacilitatorEndRoundEvent)event; + // serverGameState = null; + // /** + // * This method goes to facilitator widow. + // */ + // //facilitatorWindow.endRound(endRoundEvent); + // } + // + // } - /* + /* * Send a request to server to start an experiment */ void sendBeginExperimentRequest(){ - System.out.println("I am in sendBeginExperiment"); - transmit(new BeginExperimentRequest(id)); - //sendBeginRoundRequest(); - stopExperiment = false; - } - - /* + System.out.println("I am in sendBeginExperiment"); + transmit(new BeginExperimentRequest(id)); + //sendBeginRoundRequest(); + stopExperiment = false; + } + + /* * Send a request to start a round */ public void sendBeginRoundRequest() { transmit(new BeginRoundRequest(id)); } - -// /* -// * Send a request to stop an experiment -// */ -// -// public void sendStopExperimentRequest() { -// transmit(new EndExperimentRequest(id)); -// endExperiment(); -// } - -// public void endExperiment() { -// configuration.resetExperimentRoundConfiguration(); -// serverGameState = null; -// stopExperiment = true; -// experimentRunning = false; -// //facilitatorWindow.updateMenuItems(); -// } + + // /* + // * Send a request to stop an experiment + // */ + // + // public void sendStopExperimentRequest() { + // transmit(new EndExperimentRequest(id)); + // endExperiment(); + // } + + // public void endExperiment() { + // configuration.resetExperimentRoundConfiguration(); + // serverGameState = null; + // stopExperiment = true; + // experimentRunning = false; + // //facilitatorWindow.updateMenuItems(); + // } /* * Send a request to stop a round */ - + public void sendEndRoundRequest() { transmit(new EndRoundRequest(id)); } @@ -228,31 +222,31 @@ public void sendSetConfigRequest() { dispatcher.transmit(new ConfigurationEvent(id, getConfiguration())); } - + public FacilitatorWindow getFacilitatorWindow() { return irrigationFacilitatorWindow; } - + public Identifier getIdentifier(){ - return id; + return id; } public ServerDataModel getServerGameState(){ - return serverGameState; + return serverGameState; } - + public ServerConfiguration getConfiguration(){ - return configuration; + return configuration; } - + public boolean isExperimentRunning(){ - return experimentRunning; + return experimentRunning; } - - public RoundConfiguration getCurrentRoundConfiguration() { + + public RoundConfiguration getCurrentRoundConfiguration() { return configuration.getCurrentParameters(); } - + public void setServerGameState(ServerDataModel serverGameState) { this.serverGameState = serverGameState; } Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java 2009-10-09 06:26:41 UTC (rev 291) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/ClientData.java 2009-10-10 01:16:33 UTC (rev 292) @@ -219,12 +219,12 @@ * This would initialize the clientData before the start of each download. * */ - public void init(double availableBandwidth) { + public void init(double availableFlowCapacity) { resetFileInformation(); //maximumDeliveryBandwidth = getRoundConfiguration().getBtmax()/getRoundConfiguration().getClientsPerGroup(); maximumIndividualFlowCapacity = getRoundConfiguration().getMaximumIndividualFlowCapacity(); //currentBandwidth = totalContributedBandwidth; - this.availableFlowCapacity = availableBandwidth; + this.availableFlowCapacity = availableFlowCapacity; } private void resetFileInformation() { Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/GroupDataModel.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/GroupDataModel.java 2009-10-09 06:26:41 UTC (rev 291) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/GroupDataModel.java 2009-10-10 01:16:33 UTC (rev 292) @@ -141,12 +141,12 @@ } /** - * The main transfer function that maps the number of tokens generated to the Bandwidth Bi + * This function maps flow capacity to infrastructure efficiency. Returns an int representing + * the flow capacity given the infrastructure efficiency. * this needs to be designed. * @param totalTokens * @return */ - public int calculateFlowCapacity(final int infrastructureEfficiency) { if (infrastructureEfficiency <= 45) { return 0; @@ -190,7 +190,6 @@ currentlyAvailableFlowCapacity = maximumAvailableFlowCapacity; } - public void allocateFlowCapacity(ClientData clientData) { if (currentlyAvailableFlowCapacity >= clientData.getMaximumIndividualFlowCapacity()) { currentlyAvailableFlowCapacity -= clientData.getMaximumIndividualFlowCapacity(); Modified: irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java =================================================================== --- irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java 2009-10-09 06:26:41 UTC (rev 291) +++ irrigation/trunk/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java 2009-10-10 01:16:33 UTC (rev 292) @@ -19,22 +19,23 @@ import edu.asu.commons.irrigation.conf.RoundConfiguration; import edu.asu.commons.irrigation.conf.ServerConfiguration; import edu.asu.commons.irrigation.events.BeginCommunicationRequest; +import edu.asu.commons.irrigation.events.CloseGateEvent; import edu.asu.commons.irrigation.events.DisplaySubmitTokenRequest; import edu.asu.commons.irrigation.events.EndRoundEvent; import edu.asu.commons.irrigation.events.FacilitatorEndRoundEvent; -import edu.asu.commons.irrigation.events.OpenGateEvent; import edu.asu.commons.irrigation.events.InstructionEnableRequest; import edu.asu.commons.irrigation.events.InvestedTokensEvent; +import edu.asu.commons.irrigation.events.OpenGateEvent; +import edu.asu.commons.irrigation.events.PauseEvent; import edu.asu.commons.irrigation.events.QuizCompletedEvent; import edu.asu.commons.irrigation.events.RegistrationEvent; import edu.asu.commons.irrigation.events.RoundStartedEvent; import edu.asu.commons.irrigation.events.SendContributionStatusEvent; import edu.asu.commons.irrigation.events.SendFileProgressEvent; -import edu.asu.commons.irrigation.events.PauseEvent; -import edu.asu.commons.irrigation.events.CloseGateEvent; import edu.asu.commons.net.Dispatcher; import edu.asu.commons.net.Identifier; import edu.asu.commons.net.event.ConnectionEvent; +import edu.asu.commons.net.event.DisconnectionEvent; import edu.asu.commons.net.event.DisconnectionRequest; import edu.asu.commons.util.Duration; @@ -152,32 +153,32 @@ private void initializeClientHandlers() { // client handlers addEventProcessor(new EventTypeProcessor<ConnectionEvent>(ConnectionEvent.class) { + @Override public void handle(ConnectionEvent event) { // handle incoming connections Identifier identifier = event.getId(); ClientData clientData = new ClientData(identifier); synchronized (clients) { clients.put(identifier, clientData); + serverDataModel.addClient(clientData); } - serverDataModel.addClient(clientData); + transmit(new RegistrationEvent(clientData.getId(), getRoundConfiguration(), clientData)); } }); addEventProcessor(new EventTypeProcessor<DisconnectionRequest>(DisconnectionRequest.class) { - public void handle(DisconnectionRequest event) { + @Override + public void handleInExperimentThread(DisconnectionRequest request) { + getLogger().warning("disconnecting: " + request); + Identifier disconnectedClientId = request.getId(); synchronized (clients) { - // FIXME: thread-safe? - //removing the entire group from the client list, when one of the members get disconnected - GroupDataModel groupDataModel =clients.get(event.getId()).getGroupDataModel(); - for(ClientData clientData : groupDataModel.getClientDataMap().values()){ - System.out.println("Removing the client id :"+clientData.getId()); - clients.remove(clientData.getId()); - } - //clients.remove(event.getId()); + clients.remove(request.getId()); + serverDataModel.removeClient(request.getId()); } } }); addEventProcessor(new EventTypeProcessor<ChatRequest>(ChatRequest.class) { + @Override public void handle(ChatRequest request) { Identifier source = request.getSource(); Identifier target = request.getTarget(); @@ -282,7 +283,6 @@ * @param group */ private void process(GroupDataModel group) { - // reset group's available bandwidth and re-allocate client delivery bandwidths. group.resetCurrentlyAvailableFlowCapacity(); long time = currentRoundDuration.getTimeLeft() / 1000; @@ -299,10 +299,10 @@ //System.out.println("Downloading file"+clientData.getFileNumber()+"Current time"+System.currentTimeMillis()/1000); group.allocateFlowCapacity(clientData); } - else if (clientData.isGateClosed()) { clientData.init(group.getCurrentlyAvailableFlowCapacity()); } + // right now the clients cannot be paused. else if (clientData.isPaused()) { } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |