예제 #1
0
        public void Evaluate(int SpreadMax)
        {
            bool userchanged = false;

            #region Build Links
            if (this.FPinInUsers.PinIsChanged)
            {
                this.FUsers.Clear();
                this.FLinks.Clear();

                try
                {
                    for (int i = 0; i < this.FPinInUsers.SliceCount; i++)
                    {
                        string user;
                        this.FPinInUsers.GetString(i, out user);
                        this.FUsers.Add(user);
                    }

                    #region Execute FQl and parse result
                    string fql    = this.GetFQL(this.FUsers);
                    string result = api.DirectFQLQuery(fql);

                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(result);
                    XmlElement element = doc.DocumentElement;
                    foreach (XmlNode noderoot in doc.ChildNodes)
                    {
                        if (noderoot.Name == "fql_query_response")
                        {
                            foreach (XmlNode node in noderoot.ChildNodes)
                            {
                                if (node.Name == "friend_info")
                                {
                                    string uid1 = "";
                                    string uid2 = "";

                                    foreach (XmlNode nodeuid in node.ChildNodes)
                                    {
                                        if (nodeuid.Name == "uid1")
                                        {
                                            uid1 = nodeuid.InnerText;
                                        }

                                        if (nodeuid.Name == "uid2")
                                        {
                                            uid2 = nodeuid.InnerText;
                                        }
                                    }

                                    if (uid1 != "" && uid2 != "")
                                    {
                                        UserLink link = new UserLink();
                                        link.User1  = uid1;
                                        link.User2  = uid2;
                                        link.Index1 = this.FUsers.IndexOf(uid1);
                                        link.Index2 = this.FUsers.IndexOf(uid2);
                                        this.FLinks.Add(link);
                                    }
                                }
                            }
                        }
                    }
                    #endregion
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error");
                }
                userchanged = true;
            }
            #endregion

            if (userchanged || this.FPinInX.PinIsChanged || this.FPinInY.PinIsChanged)
            {
                List <double> lstx = new List <double>();
                List <double> lsty = new List <double>();

                int idx = 0;
                int idy = 0;

                #region Build Points
                for (int i = 0; i < this.FPinInUsers.SliceCount; i++)
                {
                    double d;

                    this.FPinInX.GetValue(idx, out d);
                    lstx.Add(d);

                    this.FPinInY.GetValue(idy, out d);
                    lsty.Add(d);

                    idx++;
                    idy++;

                    if (idx >= this.FPinInX.SliceCount)
                    {
                        idx = 0;
                    }

                    if (idy >= this.FPinInY.SliceCount)
                    {
                        idy = 0;
                    }
                }
                #endregion

                this.FPinOutX1.SliceCount = this.FLinks.Count;
                this.FPinOutX2.SliceCount = this.FLinks.Count;
                this.FPinOutY1.SliceCount = this.FLinks.Count;
                this.FPinOutY2.SliceCount = this.FLinks.Count;

                for (int i = 0; i < this.FLinks.Count; i++)
                {
                    this.FPinOutX1.SetValue(i, lstx[this.FLinks[i].Index1]);
                    this.FPinOutX2.SetValue(i, lstx[this.FLinks[i].Index2]);
                    this.FPinOutY1.SetValue(i, lsty[this.FLinks[i].Index1]);
                    this.FPinOutY2.SetValue(i, lsty[this.FLinks[i].Index2]);
                }
            }
        }