public override Task ActivateAsync() { _logger = base.GetLogger("Aggregator"); _sw = new Stopwatch(); _sw.Start(); _stattimer = RegisterTimer(ReportResults, null, TimeSpan.FromSeconds(REPORT_PERIOD), TimeSpan.FromSeconds(REPORT_PERIOD)); return(base.ActivateAsync()); }
/// <summary> /// Start the simulation. /// </summary> /// <param name="name"></param> /// <param name="manager"></param> /// <returns></returns> public Task StartSimulation(long id, string url, IManagerGrain manager) { _url = url; _manager = manager; var rand = new Random(); _reqtimer = RegisterTimer(SendRequest, null, TimeSpan.FromSeconds(rand.Next(MAX_DELAY)), TimeSpan.FromSeconds(PERIOD)); _stattimer = RegisterTimer(ReportResults, null, TimeSpan.FromSeconds(REPORT_PERIOD), TimeSpan.FromSeconds(REPORT_PERIOD)); return(TaskDone.Done); }
/// <summary> /// Instantiate simulator grains and start the simulation on each. /// </summary> /// <param name="o"></param> /// <returns></returns> private async Task StartSimulatorsDelayed(object o) { List <Task> tasks = new List <Task>(); // Stop the one-time timer _starttimer.Dispose(); long start = this.GetPrimaryKeyLong() * _count; for (long i = start; i < start + _count; i++) { ISimulatorGrain grainRef = SimulatorGrainFactory.GetGrain(i); _sims.Add(grainRef); tasks.Add(grainRef.StartSimulation(i, _url, this, start_lat, start_lon)); } await Task.WhenAll(tasks); // wait until all grains have started _logger.Info("*** " + _count + " simulators started."); _stattimer = RegisterTimer(ReportResults, null, TimeSpan.FromSeconds(REPORT_PERIOD), TimeSpan.FromSeconds(REPORT_PERIOD)); }
/// <summary> /// Start simulation at a given latitude/longitude coordinate. /// </summary> /// <param name="id"></param> /// <param name="url"></param> /// <param name="managerGrain"></param> /// <param name="latitude"></param> /// <param name="longitude"></param> /// <returns></returns> public Task StartSimulation(long id, string url, IManagerGrain managerGrain, double latitude, double longitude) { _url = url; _manager = managerGrain; var rand = new Random((int)this.GetPrimaryKeyLong()); // initialize simulation parameters cur_lat = latitude + (rand.NextDouble() - 0.5) / 10.0; cur_long = longitude + (rand.NextDouble() - 0.5) / 10.0; device_id = Guid.NewGuid(); lat_speed = (rand.NextDouble() - 0.5) / 10.0; long_speed = (rand.NextDouble() - 0.5) / 10.0; _logger.Info("*** simulator " + this.GetPrimaryKeyLong() + " starting " + cur_lat + " " + cur_long + " " + device_id); // start the timers _reqtimer = RegisterTimer(SendRequest, null, TimeSpan.FromSeconds(rand.Next(MAX_DELAY)), TimeSpan.FromSeconds(PERIOD)); _stattimer = RegisterTimer(ReportResults, null, TimeSpan.FromSeconds(REPORT_PERIOD), TimeSpan.FromSeconds(REPORT_PERIOD)); return(TaskDone.Done); }