private List<UserView> UsersThatNotAnsweredTwoPhaseCommit(Reservation reservationn, bool retry) { List<UserView> listOfUsers = new List<UserView>(); List<UserView> orignalList = reservationn.getUserList(); List<UserView> auxList = new List<UserView>(); if (retry == false) { Console.WriteLine("No retry"); foreach (KeyValuePair<int, ReservationMessage> answers in threadResponses) { foreach (KeyValuePair<String, String> index in answers.Value.response2PC) { UserView u = GetKnownUserByName(index.Key); //if the dicionary is empty then the user has not answered if (index.Value.Equals("Timeout")) { Console.WriteLine("User " + u.getName() + " has not answered"); listOfUsers.Add(u); } else auxList.Add(u); //if the user has answered add it to the aux list } } } else { Console.WriteLine("Retry."); foreach (KeyValuePair<String, ReservationMessage> answers in threadResponses2) { foreach (KeyValuePair<String,String> index in answers.Value.response2PC) { UserView u = GetKnownUserByName(index.Key); //if the dicionary is empty then the user has not answered if (index.Value.Equals("Timeout")) { Console.WriteLine("User " + u.getName() + " has not answered"); listOfUsers.Add(u); } else auxList.Add(u); //if the user has answered add it to the aux list } } } foreach (UserView u in orignalList) { if (!IsUserInTheList(u, auxList) && !IsUserInTheList(u, listOfUsers)) listOfUsers.Add(u); } Console.WriteLine("users that have not answered..."); foreach (UserView uka in listOfUsers) { Console.WriteLine(uka.getName()); } return listOfUsers; }
private List<UserView> UsersThatNotAnsweredSendReservationCall(Reservation originalReservation, bool retrySend) { Console.WriteLine("[Calling] UsersThatNotAnsweredSendReservationCall"); List<UserView> listOfUsers = new List<UserView>(); List<UserView> orignalList = originalReservation.getUserList(); List<UserView> auxList = new List<UserView>(); if (retrySend == false) { Console.WriteLine("No retry"); foreach (KeyValuePair<int, ReservationMessage> answers in threadResponses) { foreach (KeyValuePair<String, Dictionary<int, String>> index in answers.Value.GetAllResponses()) { UserView u = GetKnownUserByName(index.Key); //if the dicionary is empty then the user has not answered if (index.Value.Count == 0) { Console.WriteLine("User " + u.getName() + " has not answered"); listOfUsers.Add(u); } else auxList.Add(u); //if the user has answered add it to the aux list } } } else { Console.WriteLine("Retry."); foreach (KeyValuePair<String, ReservationMessage> answers in threadResponses2) { foreach (KeyValuePair<String, Dictionary<int, String>> index in answers.Value.GetAllResponses()) { UserView u = GetKnownUserByName(index.Key); //if the dicionary is empty then the user has not answered if (index.Value.Count == 0) { Console.WriteLine("User " + u.getName() + " has not answered"); listOfUsers.Add(u); } else { Console.WriteLine(u.getName() + " has answered"); auxList.Add(u); //if the user has answered add it to the aux list } } } } foreach (UserView u in orignalList) { if (!IsUserInTheList(u, auxList) && !IsUserInTheList(u, listOfUsers)) listOfUsers.Add(u); } Console.WriteLine("users that have not answered..."); foreach (UserView uka in listOfUsers) { Console.WriteLine(uka.getName()); } return listOfUsers; }
private Reservation DeleteAbortedSlotsFromReservation(Reservation reservation) { Console.WriteLine("[Calling] DeleteAbortedSlotsFromReservation"); List<ReservationSlot> newSlotList = new List<ReservationSlot>(); foreach (ReservationSlot slot in reservation.getSlotList()) { if (slot.isAborted() == false) { newSlotList.Add(slot); } else Console.WriteLine("Slot " + slot.GetNumber() + " is aborted! Remove it"); } Reservation reservationWithoutAbortedSlots = new Reservation(reservation.getDescription(), reservation.getUserList(), newSlotList, reservation.getCreator(), reservation.getTicket()); return reservationWithoutAbortedSlots; }
/// <summary> /// Debug Method /// Prints reservation information /// </summary> /// <param name="reservation"></param> private void PrintReservation(Reservation reservation) { Console.WriteLine("[Calling] PrintReservation"); Console.WriteLine("RESERVATION"); if (reservation.getCreator() == null) { Console.WriteLine("[Error]: Creator is Null"); return; } if (reservation.getDescription() == null) { Console.WriteLine("[Error]: Description is null"); return; } Console.WriteLine("Description: " + reservation.getDescription()); if (reservation.getUserList().Count == 0) { Console.WriteLine("[Error]: User list is empty"); return; } Console.WriteLine("User List"); foreach (UserView u in reservation.getUserList()) { Console.WriteLine(u.getName()); } if (reservation.getSlotList().Count == 0) { Console.WriteLine("[Error]: Slot list is empty"); return; } foreach (ReservationSlot s in reservation.getSlotList()) { Console.WriteLine(s.ToString()); } }
private List<UserView> ChooseUsers(Reservation reservation, int messageCounter) { Console.WriteLine("[Calling] ChooseUsers"); int userListSize = reservation.getUserList().Count; float numberOfUsersToSelect = (float)System.Math.Round((float)userListSize /(2*(messageCounter))); if (userListSize == 1 || userListSize == 0) numberOfUsersToSelect = 1; Console.WriteLine("Number of User's to Select: " + numberOfUsersToSelect); List<UserView> selectedUsers = new List<UserView>(); Dictionary<UserView, int> potencialUsers = new Dictionary<UserView, int>(); //contains the list of candidate users lock (User.KnownUsers) { foreach (KeyValuePair<UserView, int> u in User.KnownUsers) { Console.WriteLine("Current User: "******" Trust: " + u.Value); //if the user is in the reservation list and I know it, then he is a potential candidates foreach (UserView r in reservation.getUserList()) { if (r.getName().Equals(u.Key.getName()) && !r.getName().Equals(User.Name)) { potencialUsers.Add(u.Key, u.Value); } } } } for (int i = 1; i <= numberOfUsersToSelect; i++) { int totalSum = CalculateTrustSum(potencialUsers); Dictionary<UserView, float> updatedPotentialUsers = new Dictionary<UserView, float>(); foreach (KeyValuePair<UserView, int> u in potencialUsers) { float trustRatio = CalculateTrustRatio(totalSum, u); KeyValuePair<UserView, float> updatedUserwithTrustRatio = new KeyValuePair<UserView, float>(u.Key, trustRatio); updatedPotentialUsers.Add(updatedUserwithTrustRatio.Key, updatedUserwithTrustRatio.Value); //debug Console.WriteLine("User " + updatedUserwithTrustRatio.Key.getName() + " Trust Ratio " + updatedPotentialUsers[updatedUserwithTrustRatio.Key]); } Dictionary<UserView, Tuple<float, float>> cumulativeDistributionFunction = new Dictionary<UserView, Tuple<float, float>>(); //debug! Console.WriteLine("Printing potential users.."); foreach (KeyValuePair<UserView, float> p in updatedPotentialUsers) { Console.WriteLine("User: "******" Trust Ratio: " + p.Value); } cumulativeDistributionFunction = BuildCumulativeDistributionFunction(updatedPotentialUsers); PrintUsersInterval(cumulativeDistributionFunction); //generate a random number and sees which user cumulative function interval that number is in //that user will be the chosen one! System.Random randomNumberGenerator = new System.Random(); float randomNumber = (float)randomNumberGenerator.NextDouble(); Console.WriteLine("Random Number: " + randomNumber); foreach (KeyValuePair<UserView, Tuple<float, float>> u in cumulativeDistributionFunction) { if (Between(randomNumber, u.Value.Item1, u.Value.Item2)) { selectedUsers.Add(u.Key); potencialUsers.Remove(u.Key); break; } } }//closes first for return selectedUsers; }