Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        /// <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());
            }
        }
Пример #5
0
        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;
        }