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()); }
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); }