コード例 #1
0
ファイル: QueryByFile.cs プロジェクト: archie/sesun
 public override bool CompareTo(Query o)
 {
     QueryByFile q2 = (QueryByFile)o;
     if (this.Name.CompareTo(q2.Name) == 0 &&
                     this.LowestId.CompareTo(q2.LowestId) == 0 &&
                     this.Uris.ElementAt(0).CompareTo(q2.Uris.ElementAt(0)) == 0)
         return true;
     else
         return false;
 }
コード例 #2
0
ファイル: Query.cs プロジェクト: archie/sesun
 public abstract bool CompareTo(Query o);
コード例 #3
0
 private string whoSentQuery(Query query)
 {
     foreach (Friend f in ServerApp._user.Friends)
     {
         if (f.Uris.ElementAt(0).CompareTo(query.ContactingServerUri.ElementAt(0)) == 0)
             return f.Name;
     }
     MessageBox.Show(ServerApp._user.Username + "WhoIsUri called with invalid node uri");
     return "";
 }
コード例 #4
0
 private bool isPredecessor(Query q)
 {
     foreach (Friend f in ServerApp._user.Friends)
     {
         if (q.ContactingServerUri.ElementAt(0).CompareTo(f.Uris.ElementAt(0)) == 0)
         {
             if(!f.SucessorSwarm)
                 return true;
         }
     }
     return false;
 }
コード例 #5
0
        private List<Query> getList(Query query)
        {
            List<Query> messageList = new List<Query>();
            List<Query> messages = new List<Query>();
            if (query is QueryByFile)
            {
                foreach (QueryByFile q in ServerApp._user.ReceivedFileMessages)
                    messages.Add(q);
            }
            else
            {
                foreach (QueryByName q in ServerApp._user.ReceivedNameMessages)
                    messages.Add(q);
            }

            //Only returns messages wich have the same ID and belong to predecessor nodes.
            foreach (Query q in messages)
            {
                if (q.Id.Equals(query.Id))
                {
                    messageList.Add(q);
                }
            }
            return messageList;
        }
コード例 #6
0
        private bool consensus(Query query)
        {
            int i, j, counting;
            //This list contains all the messages from PREDECESSORS with the same ID
            List<Query> messageList = getList(query);
            bool sendMessage = false;
            Query q1, q2;

            //Checks if it has received #predecessors/2 answers, if so it responds and stores Datetime on sentMessages
            //otherwise it adds query to receivedMessages

            MessageBox.Show("MessageCount = " + messageList.Count + " predecessors count = " + ServerApp._user.Friends.Count(x => !x.SucessorSwarm));

            if (messageList.Count > ServerApp._user.Friends.Count(x => !x.SucessorSwarm) / 2)
            {
                //anwer message
                //do consensus thing------------------------------

                for (i = 0; i < messageList.Count; i++)
                {
                    q1 = messageList.ElementAt(i);
                    counting = 0;
                    for (j = i + 1; j < messageList.Count; j++)
                    {
                        q2 = messageList.ElementAt(j);
                        if (q1.CompareTo(q2))
                            counting++;

                    }
                    if (counting + 1 >= ServerApp._user.Friends.Count(x => !x.SucessorSwarm) / 2)
                    {
                        sendMessage = true;
                        break;
                    }
                }
                if(sendMessage == false)
                    MessageBox.Show(ServerApp._user.Username + " : There are enough messages but still no consensus.");
                //-------------------------------------------------
            }
            else
            {
                MessageBox.Show(ServerApp._user.Username + " : Still not enough messages to do consensus.");
            }
            return sendMessage;
        }