示例#1
0
        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);
                        }
                    }
                }
            }
        }
示例#2
0
 // Check if the answer is correct. Returns: true if correct, false otherwise.
 public bool CheckAnswer(string answer)
 {
     return(Answers.Contains(answer.ToLower()));
 }
示例#3
0
        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");
            }
        }