void ProcessProviders(DhtPeerMessage[] providers) { if (providers == null) { return; } foreach (var provider in providers) { if (provider.TryToPeer(out Peer p)) { if (p == Dht.Swarm.LocalPeer) { continue; } p = Dht.Swarm.RegisterPeer(p); if (QueryType == MessageType.GetProviders) { // Only unique answers var answer = p as T; if (!Answers.Contains(answer)) { AddAnswer(answer); } } } } }
// Check if the answer is correct. Returns: true if correct, false otherwise. public bool CheckAnswer(string answer) { return(Answers.Contains(answer.ToLower())); }
public double Compare(XmlBase answer, double Value) { if (MatchingType == XmlMatchingType.Multy) { var _answer = answer as XmlMatchingMultyAnswer; double eCount = 0; foreach (var item in Answers) { if (!_answer.Answer.Contains(item)) { ++eCount; } } foreach (var item in _answer.Answer) { if (!Answers.Contains(item)) { ++eCount; } } if (eCount >= Answers.Count) { eCount = Answers.Count; } return(Value * (1 - (eCount / Answers.Count))); } else if (MatchingType == XmlMatchingType.Single) { var _answer = answer as XmlMatchingSingleAnswer; var correctAnswers = Answers.OrderBy(x => x.Key). Select(y => y.Value).ToList(); var input = _answer.Answer.ToList().Take(Rows.Count).ToList(); double eCount = 0; if (correctAnswers.Count != input.Count()) { throw new Exception("Matching - wrong option count"); } for (int i = 0; i < correctAnswers.Count; ++i) { if (correctAnswers[i] != input[i]) { eCount++; } } return(Value * (1 - (eCount / correctAnswers.Count))); } else { throw new Exception("Matching isn't initialized"); } }