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; }
public abstract bool CompareTo(Query o);
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 ""; }
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; }
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; }
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; }