/* * Title: CloudSim Toolkit * Description: CloudSim (Cloud Simulation) Toolkit for Modeling and Simulation of Clouds * Licence: GPL - http://www.gnu.org/copyleft/gpl.html * * Copyright (c) 2009-2012, The University of Melbourne, Australia */ package org.cloudbus.cloudsim.core; /** * CloudimShutdown waits for termination of all CloudSim user entities to determine the end of * simulation. This class will be created by CloudSim upon initialisation of the simulation, i.e. * done via <tt>CloudSim.init()</tt> method. Hence, do not need to worry about creating an object of * this class. This object signals the end of simulation to CloudInformationService (CIS) entity. * * @author Manzur Murshed * @author Rajkumar Buyya * @since CloudSim Toolkit 1.0 */ public class CloudSimShutdown extends SimEntity { /** The total number of cloud users. */ private int numUser; /** * Instantiates a new CloudSimShutdown object. * <p/> * The total number of cloud user entities plays an important role to determine whether all * hostList' should be shut down or not. If one or more users are still not finished, then the * hostList's will not be shut down. Therefore, it is important to give a correct number of total * cloud user entities. Otherwise, CloudSim program will hang or encounter a weird behaviour. * * @param name the name to be associated with this entity (as required by {@link SimEntity} class) * @param numUser total number of cloud user entities * @throws Exception when creating this entity before initialising CloudSim package * or this entity name is <tt>null</tt> or empty * @see CloudSim#init(int, java.util.Calendar, boolean) * @pre name != null * @pre numUser >= 0 * @post $none * * @todo The use of Exception is not recommended. Specific exceptions * would be thrown (such as {@link IllegalArgumentException}) * or {@link RuntimeException} */ public CloudSimShutdown(String name, int numUser) throws Exception { // NOTE: This entity doesn't use any I/O port. // super(name, CloudSimTags.DEFAULT_BAUD_RATE); super(name); this.numUser = numUser; } /** * The main method that shuts down hostList's and Cloud Information Service (CIS). In addition, * this method writes down a report at the end of a simulation based on * <tt>reportWriterName</tt> defined in the Constructor. <br/> * <b>NOTE:</b> This method shuts down cloud hostList's and CIS entities either <tt>AFTER</tt> all * cloud users have been shut down or an entity requires an abrupt end of the whole simulation. * In the first case, the number of cloud users given in the Constructor <tt>must</tt> be * correct. Otherwise, CloudSim package hangs forever or it does not terminate properly. * * @param ev the ev * @pre $none * @post $none */ @Override public void processEvent(SimEvent ev) { numUser--; if (numUser == 0 || ev.getTag() == CloudSimTags.ABRUPT_END_OF_SIMULATION) { CloudSim.abruptallyTerminate(); } } /** * The method has no effect at the current class. */ @Override public void startEntity() { // do nothing } /** * The method has no effect at the current class. */ @Override public void shutdownEntity() { // do nothing } }