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());
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }