package se.sics.gvod.simulator.video;
import java.io.IOException;
import java.lang.String;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.PropertyConfigurator;
import se.sics.gvod.config.CroupierConfiguration;
import se.sics.gvod.ls.system.LSConfig;
import se.sics.gvod.config.VideoConfiguration;
import se.sics.gvod.net.VodNetwork;
import se.sics.gvod.network.model.king.KingLatencyMap;
import se.sics.gvod.p2p.simulator.P2pSimulator;
import se.sics.gvod.p2p.simulator.P2pSimulatorInit;
import se.sics.gvod.config.ParentMakerConfiguration;
import se.sics.gvod.config.InterAsConfiguration;
import se.sics.gvod.timer.Timer;
import se.sics.kompics.Component;
import se.sics.kompics.ComponentDefinition;
import se.sics.kompics.Kompics;
import se.sics.kompics.p2p.experiment.dsl.SimulationScenario;
import se.sics.kompics.simulation.SimulatorScheduler;
public final class VideoSimulationMain extends ComponentDefinition {
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) {
Kompics.setScheduler(simulatorScheduler);
Kompics.createAndStart(VideoSimulationMain.class, 1);
}
public VideoSimulationMain() throws IOException {
P2pSimulator.setSimulationPortType(VideoSimulatorPort.class);
// VodConfig.init(new String[] {});
// loading component configurations
final CroupierConfiguration croupierConfiguration =
(CroupierConfiguration)
CroupierConfiguration.load(CroupierConfiguration.class);
final ParentMakerConfiguration parentMakerConfiguration =
(ParentMakerConfiguration)
ParentMakerConfiguration.load(ParentMakerConfiguration.class);
final InterAsConfiguration interAsConfiguration =
(InterAsConfiguration)
InterAsConfiguration.load(InterAsConfiguration.class);
final VideoConfiguration videoConfiguration =
(VideoConfiguration)
VideoConfiguration.load(VideoConfiguration.class);
List<String> args = new ArrayList<String>();
args.add("-sim");
if (videoConfiguration.isInputFilenameSet()) {
args.add("-i");
args.add(videoConfiguration.getInputFilename());
}
if (videoConfiguration.isOutputFilenameSet()) {
args.add("-o");
args.add(videoConfiguration.getOutputFilename());
}
if (videoConfiguration.isSourceUrlSet()) {
args.add("-s");
args.add(videoConfiguration.getSourceUrl());
}
if (videoConfiguration.isDestUrlSet()) {
args.add("-d");
args.add(videoConfiguration.getDestIp() + ":" + videoConfiguration.getDestPort());
}
if (videoConfiguration.isMonitorSet()) {
args.add("-m");
args.add(videoConfiguration.getMonitorServerUrl());
args.add("-eid");
args.add("" + videoConfiguration.getExperimentId());
args.add("-eit");
args.add("" + videoConfiguration.getExperimentIteration());
}
LSConfig.init(args.toArray(new String[]{}));
// create
Component p2pSimulator = create(P2pSimulator.class);
Component VideoSimulator = create(VideoSimulator.class);
trigger(new P2pSimulatorInit(simulatorScheduler, scenario,
new KingLatencyMap(croupierConfiguration.getSeed())), p2pSimulator.getControl());
trigger(new VideoSimulatorInit(croupierConfiguration,
parentMakerConfiguration, interAsConfiguration, videoConfiguration), VideoSimulator.getControl());
connect(VideoSimulator.getNegative(VodNetwork.class), p2pSimulator.getPositive(VodNetwork.class));
connect(VideoSimulator.getNegative(Timer.class), p2pSimulator.getPositive(Timer.class));
connect(VideoSimulator.getNegative(VideoSimulatorPort.class), p2pSimulator.getPositive(VideoSimulatorPort.class));
}
}