/** * This file is part of the ID2210 course assignments kit. * * Copyright (C) 2009 Royal Institute of Technology (KTH) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package se.sics.gvod.simulator.vod; import se.sics.gvod.system.vod.VodConfiguration; import se.sics.gvod.config.BootstrapConfiguration; import java.io.IOException; import org.apache.log4j.PropertyConfigurator; import se.sics.kompics.Component; import se.sics.kompics.ComponentDefinition; import se.sics.kompics.Kompics; import se.sics.gvod.bootstrap.server.BootstrapServerInit; import se.sics.gvod.bootstrap.server.BootstrapServerMysql; import se.sics.gvod.config.VodConfig; import se.sics.gvod.config.CroupierConfiguration; import se.sics.gvod.filters.MsgDestFilterOverlayId; import se.sics.gvod.config.GradientConfiguration; import se.sics.gvod.net.VodNetwork; import se.sics.gvod.network.model.king.KingLatencyMap; import se.sics.gvod.web.server.VodMonitorServer; import se.sics.gvod.web.server.VodMonitorConfiguration; import se.sics.gvod.web.server.VodMonitorServerInit; import se.sics.kompics.p2p.experiment.dsl.SimulationScenario; import se.sics.kompics.simulation.SimulatorScheduler; import se.sics.gvod.timer.Timer; import se.sics.gvod.p2p.simulator.P2pSimulator; import se.sics.gvod.p2p.simulator.P2pSimulatorInit; /** * The <code>GVodSimulationMain</code> class. * * @author Cosmin Arad <cosmin@sics.se> */ public final class VodSimulationMain extends ComponentDefinition { static int seed; static { PropertyConfigurator.configureAndWatch("log4j.properties"); } private static SimulatorScheduler simulatorScheduler = new SimulatorScheduler(); private static SimulationScenario scenario = SimulationScenario.load(System.getProperty("scenario")); public static void main(String[] args) { seed = Integer.parseInt(System.getProperty("seed")); Kompics.setScheduler(simulatorScheduler); Kompics.createAndStart(VodSimulationMain.class, 0); } public VodSimulationMain() throws InterruptedException, IOException { P2pSimulator.setSimulationPortType(VodExperiment.class); // create Component p2pSimulator = create(P2pSimulator.class); Component bootstrapServer = create(BootstrapServerMysql.class); Component monitorServer = create(VodMonitorServer.class); Component gvodSimulator = create(VodSimulator.class); // loading component configurations final BootstrapConfiguration bootConfiguration = (BootstrapConfiguration) BootstrapConfiguration.load(BootstrapConfiguration.class); final VodMonitorConfiguration monitorConfiguration = VodMonitorConfiguration.load(System.getProperty("gvod.monitor.configuration")); final CroupierConfiguration croupierConfiguration = (CroupierConfiguration) CroupierConfiguration.load(CroupierConfiguration.class); final GradientConfiguration gradientConfiguration = (GradientConfiguration) GradientConfiguration.load(GradientConfiguration.class); final VodConfiguration gvodConfiguration = (VodConfiguration) VodConfiguration.load(VodConfiguration.class); trigger(new P2pSimulatorInit(simulatorScheduler, scenario, new KingLatencyMap(seed)/*new Latency(50,20,seed)*/), p2pSimulator.getControl()); trigger(new BootstrapServerInit(bootConfiguration,false), bootstrapServer.getControl()); trigger(new VodMonitorServerInit(monitorConfiguration), monitorServer.getControl()); trigger( new VodSimulatorInit(bootConfiguration, monitorConfiguration, croupierConfiguration, gradientConfiguration, gvodConfiguration ), gvodSimulator.getControl()); // connect connect(bootstrapServer.getNegative(VodNetwork.class), p2pSimulator.getPositive(VodNetwork.class), new MsgDestFilterOverlayId(VodConfig.SYSTEM_OVERLAY_ID)); connect(bootstrapServer.getNegative(Timer.class), p2pSimulator.getPositive(Timer.class)); connect(monitorServer.getNegative(VodNetwork.class), p2pSimulator.getPositive(VodNetwork.class), new MsgDestFilterOverlayId(VodConfig.SYSTEM_OVERLAY_ID)); // new MsgDestFilterOverlayId(monitorConfiguration.getMonitorServerAddress())); connect(monitorServer.getNegative(Timer.class), p2pSimulator.getPositive(Timer.class)); connect(gvodSimulator.getNegative(VodNetwork.class), p2pSimulator.getPositive(VodNetwork.class)); connect(gvodSimulator.getNegative(Timer.class), p2pSimulator.getPositive(Timer.class)); connect(gvodSimulator.getNegative(VodExperiment.class), p2pSimulator.getPositive(VodExperiment.class)); } }