示例#1
0
        public static DataCenter GetValidDataCenter(Models.Tuple tuple, List <DataCenter> datacenterList)
        {
            var rnd = new Random();

            double[] arrLatency = { 40, 50, 60 };
            foreach (var item in datacenterList)
            {
                var dis = GeoDistance.CalcDistance(tuple.GeoLocation.getLongitude(), tuple.GeoLocation.getLatitude(),
                                                   item.DatacenterCharacteristics.GeoLocation.getLongitude(), item.DatacenterCharacteristics.GeoLocation.getLatitude(),
                                                   GeoCodeCalcMeasurement.Kilometers);

                lock (item)
                { item.DatacenterCharacteristics.DistanceFromTuple = dis; }
                var link = new Link()
                {
                    Source          = tuple.Name,
                    Destination     = item.Name,
                    SDDistance      = dis,
                    Propagationtime = LinkUtility.CalculateLatency(dis, cooperSpeed, tuple.Size, transmitionRate, arrLatency[rnd.Next(arrLatency.Length)])
                };
                lock (CloudUtility.linksList)
                    CloudUtility.linksList.Add(link);
            }
            return(datacenterList.OrderBy(x => x.DatacenterCharacteristics.DistanceFromTuple).FirstOrDefault());
        }
示例#2
0
        public static CloudDevice CloudComputation(Models.Tuple tuple, CloudDevice cloud)
        {
            var rnd = new Random();

            double[] arrLatency = { 40, 50, 60 };
            var      dis        = GeoDistance.CalcDistance(tuple.GeoLocation.getLongitude(), tuple.GeoLocation.getLatitude(),
                                                           cloud.GeoLocation.getLongitude(), cloud.GeoLocation.getLatitude(), GeoCodeCalcMeasurement.Kilometers);

            lock (Lock)
            { cloud.DistanceFromTuple = dis; }
            lock (Lock)
            {
                link.Source          = tuple.Name;
                link.Destination     = cloud.Name;
                link.SDDistance      = dis;
                link.Propagationtime = LinkUtility.CalculateLatency(dis, cooperSpeed, tuple.Size, transmitionRate, arrLatency[rnd.Next(arrLatency.Length)]);
            }
            CloudRersourceUtility.ResourceConsumption(tuple, cloud);
            return(cloud);
        }