Example #1
0
        static void Main(string[] args)
        {
            magApi magTest = new magApi();
            Dictionary <string, object> result = magTest.GetResponse(str: "Id=2171526461");
            ArrayList attr = ((ArrayList)result["histograms"]);

            foreach (Dictionary <string, object> s in attr)
            {
                foreach (Dictionary <string, object> h in (ArrayList)s["histogram"])
                {
                    ulong i;
                    try
                    {
                        i = (ulong)h["value"];
                    }
                    catch
                    {
                        try
                        {
                            i = (ulong)(long)h["value"];
                        }
                        catch
                        {
                            i = (ulong)(int)h["value"];
                        }
                    }
                }
            }
        }
Example #2
0
        public SortedSet <KeyValuePair <string, UInt64> > getNodeWithConditionOr(SortedSet <KeyValuePair <string, UInt64> > hop1Set, KeyValuePair <string, UInt64> dstNode)
        {
            magApi        mag   = new magApi();
            ArrayList     attr  = new ArrayList();
            StringBuilder str   = new StringBuilder("And(");
            int           count = hop1Set.Count;
            KeyValuePair <string, UInt64> sourceNode;

            for (int i = 0; i < count - 1; i++)
            {
                sourceNode = hop1Set.ElementAt(i);
                if (sourceNode.Key.Equals("Id"))
                {
                    str.Append("Or(Id" + "=" + sourceNode.Value + ",");
                }
                else
                {
                    str.Append("Or(Composite(" + sourceNode.Key + "=" + sourceNode.Value + "),");
                }
            }
            sourceNode = hop1Set.ElementAt(count - 1);
            if (sourceNode.Key.Equals("Id"))
            {
                str.Append("Id" + "=" + sourceNode.Value);
            }
            else
            {
                str.Append("Composite(" + sourceNode.Key + "=" + sourceNode.Value + ")");
            }
            for (int i = 0; i < count - 1; i++)
            {
                str.Append(")");
            }
            if (dstNode.Key.Equals("Id"))
            {
                str.Append(",RId" + "=" + dstNode.Value + ")");
            }
            else
            {
                str.Append(",Composite(" + dstNode.Key + "=" + dstNode.Value + ")");
            }
            Console.WriteLine(str.ToString());
            StreamWriter sw = new StreamWriter("I:\\1.txt", true);

            sw.WriteLine(str.ToString());
            sw.Flush();
            sw.Close();
            Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: "Id");

            attr = ((ArrayList)dataJson["entities"]);
            SortedSet <KeyValuePair <string, UInt64> > nodeList = convertJsonDatoToList(attr);

            return(nodeList);
        }
Example #3
0
        /// <summary>
        /// 判断输入id是否为AA.AuId
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private bool is_id_auid(UInt64 id)
        {
            magApi    mag  = new magApi();
            ArrayList attr = new ArrayList();

            StringBuilder str = new StringBuilder("composite(AA.AuId=");

            str.Append(id.ToString());
            str.Append(')');
            Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 100000000, attributes: "Id");

            attr = ((ArrayList)dataJson["entities"]);
            SortedSet <KeyValuePair <string, UInt64> > nodeList = convertJsonDatoToList(attr);

            if (nodeList.Count != 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
Example #4
0
        /// <summary>
        /// 获取1-hop节点
        /// </summary>
        /// <param name="sourceNode"></param>
        /// <returns></returns>
        //public SortedSet<KeyValuePair<string, UInt64>> getNode(SortedSet<KeyValuePair<string, UInt64>> srcNodeSet)
        //{
        //    SortedSet<KeyValuePair<string, UInt64>> nodeList = new SortedSet<KeyValuePair<string, UInt64>>(new SortedSetComparer());
        //    StringBuilder str = new StringBuilder("Composite(AA.AuId=");
        //    str.Append(sourceNode.Value.ToString());
        //    str.Append(')');
        //    Dictionary<string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: "Id,AA.AfId");
        //    attr = ((ArrayList)dataJson["histograms"]);
        //    return nodeList;
        //}
        /// <summary>
        /// 获取1-hop节点
        /// </summary>
        /// <param name="sourceNode"></param>
        /// <returns></returns>
        public SortedSet <KeyValuePair <string, UInt64> > getLastNode(KeyValuePair <string, UInt64> sourceNode)
        {
            ulong     MaxCount = 1000;
            ArrayList attr     = new ArrayList();
            SortedSet <KeyValuePair <string, UInt64> > nodeList = new SortedSet <KeyValuePair <string, UInt64> >(new SortedSetComparer());

            switch (sourceNode.Key)
            {
            case "Id":
            {
                StringBuilder str = new StringBuilder("Id=");
                str.Append(sourceNode.Value.ToString());
                Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "F.FId,AA.AuId,J.JId,C.CId");
                attr = ((ArrayList)dataJson["entities"]);
                foreach (Dictionary <string, object> s in attr)
                {
                    foreach (KeyValuePair <string, object> h in s)
                    {
                        if (h.Key == "logprob")
                        {
                            continue;
                        }
                        if (h.Key == "Id")
                        {
                            nodeList.Add(new KeyValuePair <string, ulong>(h.Key, Convert.ToUInt64(h.Value)));
                            continue;
                        }
                        if (h.Key == "RId" || h.Key == "Id")
                        {
                            foreach (object t in (ArrayList)h.Value)
                            {
                                string tkey = "Id";
                                nodeList.Add(new KeyValuePair <string, ulong>(tkey, Convert.ToUInt64(t)));
                            }
                            continue;
                        }
                        if (h.Key == "J")
                        {
                            foreach (KeyValuePair <string, object> t in (Dictionary <string, object>)h.Value)
                            {
                                nodeList.Add(new KeyValuePair <string, ulong>("J." + t.Key, Convert.ToUInt64(t.Value)));
                            }
                            continue;
                        }
                        foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                        {
                            foreach (KeyValuePair <string, object> t in h1)
                            {
                                string tkey = h.Key + '.' + t.Key;
                                nodeList.Add(new KeyValuePair <string, ulong>(tkey, Convert.ToUInt64(t.Value)));
                            }
                        }
                    }
                }
                str = new StringBuilder("RId=");
                str.Append(sourceNode.Value.ToString());
                dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "Id");
                attr     = ((ArrayList)dataJson["entities"]);
                break;
            }

            case "AA.AuId":
            {
                StringBuilder str = new StringBuilder("Composite(AA.AuId=");
                str.Append(sourceNode.Value.ToString());
                str.Append(')');
                Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "Id,AA.AfId");
                attr = ((ArrayList)dataJson["entities"]);
                break;
            }
            }
            foreach (Dictionary <string, object> s in attr)
            {
                foreach (KeyValuePair <string, object> h in s)
                {
                    if (h.Key == "logprob")
                    {
                        continue;
                    }
                    if (h.Key == "Id")
                    {
                        nodeList.Add(new KeyValuePair <string, ulong>(h.Key, Convert.ToUInt64(h.Value)));
                        continue;
                    }
                    if (h.Key == "RId" || h.Key == "Id")
                    {
                        foreach (object t in (ArrayList)h.Value)
                        {
                            string tkey = "Id";
                            nodeList.Add(new KeyValuePair <string, ulong>(tkey, Convert.ToUInt64(t)));
                        }
                        continue;
                    }
                    if (h.Key == "J")
                    {
                        foreach (KeyValuePair <string, object> t in (Dictionary <string, object>)h.Value)
                        {
                            nodeList.Add(new KeyValuePair <string, ulong>("J." + t.Key, Convert.ToUInt64(t.Value)));
                        }
                        continue;
                    }
                    foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                    {
                        foreach (KeyValuePair <string, object> t in h1)
                        {
                            string tkey = h.Key + '.' + t.Key;
                            nodeList.Add(new KeyValuePair <string, ulong>(tkey, Convert.ToUInt64(t.Value)));
                        }
                    }
                }
            }
            return(nodeList);
        }
Example #5
0
        public bool checkNodeWithCondition(KeyValuePair <string, UInt64> sourceNode, KeyValuePair <string, UInt64> dstNode)
        {
            magApi    mag  = new magApi();
            ArrayList attr = new ArrayList();

            switch (sourceNode.Key)
            {
            case "Id":
            {
                StringBuilder str = new StringBuilder("And(Id=");
                str.Append(sourceNode.Value.ToString());
                if (dstNode.Key.Equals("Id"))
                {
                    str.Append(",RId" + "=" + dstNode.Value + ")");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: "Id");
                    attr = ((ArrayList)dataJson["entities"]);
                }
                else if (!dstNode.Key.Equals("AA.AfId"))
                {
                    str.Append(",Composite(" + dstNode.Key + "=" + dstNode.Value + "))");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: dstNode.Key);
                    attr = ((ArrayList)dataJson["entities"]);
                }

                break;
            }

            case "AA.AuId":
            {
                StringBuilder str = new StringBuilder("And(Composite(AA.AuId=");
                str.Append(sourceNode.Value.ToString());
                if (dstNode.Key.Equals("Id"))
                {
                    str.Append("),Id" + "=" + dstNode.Value + ")");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: "Id");
                    attr = ((ArrayList)dataJson["entities"]);
                }
                if (dstNode.Key.Equals("AA.AfId"))
                {
                    str.Append("),Composite(" + dstNode.Key + "=" + dstNode.Value + "))");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: dstNode.Key);
                    attr = ((ArrayList)dataJson["entities"]);
                }
                break;
            }

            case "AA.AfId":
            {
                StringBuilder str = new StringBuilder("And(Composite(AA.AfId=");
                str.Append(sourceNode.Value.ToString());
                if (dstNode.Key.Equals("AA.AuId"))
                {
                    str.Append("),Composite(" + dstNode.Key + "=" + dstNode.Value + "))");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: dstNode.Key);
                    attr = ((ArrayList)dataJson["entities"]);
                }
                break;
            }

            case "C.CId":
            {
                StringBuilder str = new StringBuilder("And(Composite(C.CId=");
                str.Append(sourceNode.Value.ToString());
                if (dstNode.Key.Equals("Id"))
                {
                    str.Append(")," + dstNode.Key + "=" + dstNode.Value + ")");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: dstNode.Key);
                    attr = ((ArrayList)dataJson["entities"]);
                }
                break;
            }

            case "F.FId":
            {
                StringBuilder str = new StringBuilder("And(Composite(F.FId=");
                str.Append(sourceNode.Value.ToString());
                if (dstNode.Key.Equals("Id"))
                {
                    str.Append(")," + dstNode.Key + "=" + dstNode.Value + ")");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: dstNode.Key);
                    attr = ((ArrayList)dataJson["entities"]);
                }
                break;
            }

            case "J.JId":
            {
                StringBuilder str = new StringBuilder("Composite(J.JId=");
                str.Append(sourceNode.Value.ToString());
                if (dstNode.Key.Equals("Id"))
                {
                    str.Append(")," + dstNode.Key + "=" + dstNode.Value + ")");
                    Dictionary <string, object> dataJson = mag.GetResponse(str: str.ToString(), count: 10000000, attributes: dstNode.Key);
                    attr = ((ArrayList)dataJson["entities"]);
                }
                break;
            }
            }
            foreach (Dictionary <string, object> s in attr)
            {
                foreach (Dictionary <string, object> h in (ArrayList)s["evaluate"])
                {
                    return(true);
                }
            }
            return(false);
        }
Example #6
0
        public List <List <UInt64> > solve(KeyValuePair <string, UInt64> srcNode, KeyValuePair <string, UInt64> dstNode)
        {
            List <List <UInt64> > pathList = new List <List <ulong> >();
            //
            SortedSet <KeyValuePair <string, UInt64> > NextNodeOfSrc = null;
            ArrayList nextNodeAttrOfSrcAuid = null;
            Task      getNextNodeOfSrc      = new Task(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    try
                    {
                        GetOneHopNodeClass getOneHopNode = new GetOneHopNodeClass();
                        NextNodeOfSrc = getOneHopNode.getNextNode(srcNode, ref nextNodeAttrOfSrcAuid);
                        break;
                    }
                    catch (Exception ex)
                    {
                        ;
                    }
                }
            });
            //
            SortedSet <KeyValuePair <string, UInt64> > LastNodeOfdst = null;
            ArrayList LastNodeAttrOfDst = null;
            Task      getLastNodeOfdst  = new Task(() =>
            {
                for (int i = 0; i < 10; i++)
                {
                    try
                    {
                        GetOneHopNodeClass getOneHopNode = new GetOneHopNodeClass();
                        LastNodeOfdst = getOneHopNode.getLastNode(dstNode, ref LastNodeAttrOfDst);
                        break;
                    }
                    catch
                    {
                        ;
                    }
                }
            });

            //
            getNextNodeOfSrc.Start();
            getLastNodeOfdst.Start();
            //search for 1-hop
            #region search for 1-hop
            getNextNodeOfSrc.Wait();
            if (NextNodeOfSrc.Contains(dstNode))
            {
                //Console.WriteLine("1-hop存在:\n{0}-{1}", srcNode, dstNode);
                lock (pathList)
                    pathList.Add(new List <ulong>()
                    {
                        srcNode.Value, dstNode.Value
                    });
            }
            else
            {
                //Console.WriteLine("1-hup不存在");
            }
            #endregion
            #region search for 2-hop
            Task searchOf2hop = new Task(() =>
            {
                getLastNodeOfdst.Wait();
                SortedSet <KeyValuePair <string, UInt64> > instSet = new SortedSet <KeyValuePair <string, ulong> >(new GetOneHopNodeClass.SortedSetComparer());
                foreach (var s in NextNodeOfSrc)
                {
                    instSet.Add(s);
                }
                instSet.IntersectWith(LastNodeOfdst);
                if (instSet.Count != 0)
                {
                    //Console.WriteLine("2-hop存在");
                    foreach (var s in instSet)
                    {
                        //Console.WriteLine("{0}-{1}-{2}", srcNode, s, dstNode);
                        lock (pathList)
                            pathList.Add(new List <ulong>()
                            {
                                srcNode.Value, s.Value, dstNode.Value
                            });
                    }
                }
                else
                {
                    //Console.WriteLine("2-hop不存在");
                }
            });
            #endregion
            searchOf2hop.Start();
            //3-hop
            #region
            List <string> str1L = new List <string>();

            List <string> strLAuId = new List <string>();
            List <string> strLAfId = new List <string>();
            List <string> strRAuId = new List <string>();
            List <string> strRAfId = new List <string>();

            HashSet <UInt64> nextNodeOfSrcHash = new HashSet <ulong>();
            HashSet <UInt64> lastNodeOfDstHash = new HashSet <ulong>();
            #endregion
            #region 遍历nextNodeOfSrc,构造hash
            foreach (KeyValuePair <string, UInt64> s in NextNodeOfSrc)
            {
                nextNodeOfSrcHash.Add(s.Value);
                switch (s.Key)
                {
                case "Id":
                {
                    str1L.Add("Id=" + s.Value.ToString());
                    break;
                }

                case "F.FId":
                {
                    break;
                }

                case "C.CId":
                {
                    break;
                }

                case "J.JId":
                {
                    break;
                }

                case "AA.AuId":
                {
                    string value = s.Value.ToString();
                    strLAuId.Add("composite(AA.AuId=" + value + ')');
                    break;
                }

                case "AA.AfId":
                {
                    break;
                }
                }
            }
            #endregion
            #region 遍历LastNodeOfDst 构造hash
            Task hashOfLastNodeOfDst = new Task(() =>
            {
                getLastNodeOfdst.Wait();
                foreach (KeyValuePair <string, UInt64> s in LastNodeOfdst)
                {
                    lastNodeOfDstHash.Add(s.Value);
                    switch (s.Key)
                    {
                    case "Id":
                        {
                            break;
                        }

                    case "F.FId":
                        {
                            break;
                        }

                    case "C.CId":
                        {
                            break;
                        }

                    case "J.JId":
                        {
                            break;
                        }

                    case "AA.AuId":
                        {
                            strRAuId.Add("composite(AA.AuId=" + s.Value.ToString() + ')');
                            break;
                        }

                    case "AA.AfId":
                        {
                            strRAfId.Add("composite(AA.AfId=" + s.Value.ToString() + ')');
                            break;
                        }
                    }
                }
            });
            hashOfLastNodeOfDst.Start();
            #endregion
            #region threeHop_task_1 Id->Id,F,C,J,A (for src=id)
            Task threeHop_str1 = new Task(() =>
            {
                if (str1L.Count == 0)
                {
                    return;
                }
                int maxExprNum       = 60;
                List <Task> taskList = new List <Task>();
                List <List <string> > taskStrList = new List <List <string> >();
                //ToDo
                for (int iPart = 0; iPart < str1L.Count; iPart += maxExprNum)
                {
                    List <string> str1Lpart = str1L.GetRange(iPart, Math.Min(maxExprNum, str1L.Count - iPart));
                    #region new task
                    Task taskPart = new Task(() =>
                    {
                        UInt64 MaxCount    = 1000000;
                        string str1LT      = string.Join(",or(", str1Lpart.ToArray());
                        StringBuilder str1 = new StringBuilder($"or({str1LT}");
                        str1.Append(',' + str1Lpart.Last().ToString());
                        for (int i = 0; i < str1Lpart.Count(); i++)
                        {
                            str1.Append(')');
                        }
                        //Console.WriteLine("@@@TestAsync:{0}", str1);
                        magApi mag     = new magApi();
                        ArrayList attr = new ArrayList();
                        Dictionary <string, Object> dataJson = null;
                        for (int i = 0; i < 10; i++)
                        {
                            try
                            {
                                dataJson = mag.GetResponse(str: str1.ToString(), count: MaxCount, attributes: "Id,RId,F.FId,C.CId,J.JId,AA.AuId");
                                break;
                            }
                            catch (Exception ex)
                            {
                                ;
                            }
                        }
                        attr = ((ArrayList)dataJson["entities"]);
                        #region 等待hashOfLastNodeOfDst
                        hashOfLastNodeOfDst.Wait();
                        #endregion
                        #region 查找path
                        foreach (Dictionary <string, object> s in attr)
                        {
                            UInt64 selectedId = Convert.ToUInt64((s["Id"]));
                            foreach (KeyValuePair <string, object> h in s)
                            {
                                if (h.Key == "logprob" || h.Key == "Id")
                                {
                                    continue;
                                }
                                if (h.Key == "RId")
                                {
                                    foreach (object t in (ArrayList)h.Value)
                                    {
                                        if (lastNodeOfDstHash.Contains(Convert.ToUInt64(t)))
                                        {
                                            lock (pathList)
                                                pathList.Add(new List <ulong>()
                                                {
                                                    srcNode.Value, selectedId, Convert.ToUInt64(t), dstNode.Value
                                                });
                                            //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("Id", selectedId), new KeyValuePair<string, UInt64>("Id", Convert.ToUInt64(t)), dstNode);
                                        }
                                    }
                                    continue;
                                }
                                if (h.Key == "J" || h.Key == "C")
                                {
                                    foreach (KeyValuePair <string, object> t in (Dictionary <string, object>)h.Value)
                                    {
                                        if (lastNodeOfDstHash.Contains(Convert.ToUInt64(t.Value)))
                                        {
                                            lock (pathList)
                                                pathList.Add(new List <ulong>()
                                                {
                                                    srcNode.Value, selectedId, Convert.ToUInt64(t.Value), dstNode.Value
                                                });
                                            //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("Id", selectedId), t, dstNode);
                                        }
                                    }
                                    continue;
                                }
                                foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                                {
                                    foreach (KeyValuePair <string, object> t in h1)
                                    {
                                        if (lastNodeOfDstHash.Contains(Convert.ToUInt64(t.Value)))
                                        {
                                            lock (pathList)
                                                pathList.Add(new List <ulong>()
                                                {
                                                    srcNode.Value, selectedId, Convert.ToUInt64(t.Value), dstNode.Value
                                                });
                                            //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("Id", selectedId), t, dstNode);
                                        }
                                    }
                                }
                            }
                        }
                    }
                                             );
                    #endregion
                    taskList.Add(taskPart);
                }
                foreach (Task t in taskList)
                {
                    t.Start();
                }
                Task.WaitAll(taskList.ToArray());
                #endregion
            });
            #endregion
            #region  threeHop_task_2 F,C,J,A->Id
            Task threeHop_str2 = new Task(() =>
            {
                getLastNodeOfdst.Wait();
                foreach (Dictionary <string, object> s in LastNodeAttrOfDst)
                {
                    UInt64 selectedId = Convert.ToUInt64((s["Id"]));
                    foreach (KeyValuePair <string, object> h in s)
                    {
                        if (h.Key == "logprob" || h.Key == "Id")
                        {
                            continue;
                        }
                        if (h.Key == "J" || h.Key == "C")
                        {
                            foreach (KeyValuePair <string, object> t in (Dictionary <string, object>)h.Value)
                            {
                                if (nextNodeOfSrcHash.Contains(Convert.ToUInt64(t.Value)))
                                {
                                    lock (pathList)
                                        pathList.Add(new List <ulong>()
                                        {
                                            srcNode.Value, Convert.ToUInt64(t.Value), selectedId, dstNode.Value
                                        });
                                    //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, t, new KeyValuePair<string, UInt64>("Id", selectedId), dstNode);
                                }
                            }
                            continue;
                        }

                        foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                        {
                            foreach (KeyValuePair <string, object> t in h1)
                            {
                                if (t.Key == "AfId")
                                {
                                    continue;
                                }
                                if (nextNodeOfSrcHash.Contains(Convert.ToUInt64(t.Value)))
                                {
                                    lock (pathList)
                                        pathList.Add(new List <ulong>()
                                        {
                                            srcNode.Value, Convert.ToUInt64(t.Value), selectedId, dstNode.Value
                                        });
                                    //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, (t), new KeyValuePair<string, UInt64>("Id", selectedId), dstNode);
                                }
                            }
                        }
                    }
                }
            });
            #endregion
            #region threeHop_task_1 Id->Id,F,C,J,A(for src = auid)
            Task threeHop_str1_scrAuid = new Task(() =>
            {
                hashOfLastNodeOfDst.Wait();
                foreach (Dictionary <string, object> s in nextNodeAttrOfSrcAuid)
                {
                    UInt64 selectedId = Convert.ToUInt64((s["Id"]));
                    foreach (KeyValuePair <string, object> h in s)
                    {
                        if (h.Key == "logprob" || h.Key == "Id")
                        {
                            continue;
                        }
                        if (h.Key == "RId")
                        {
                            foreach (object t in (ArrayList)h.Value)
                            {
                                if (lastNodeOfDstHash.Contains(Convert.ToUInt64(t)))
                                {
                                    lock (pathList)
                                        pathList.Add(new List <ulong>()
                                        {
                                            srcNode.Value, selectedId, Convert.ToUInt64(t), dstNode.Value
                                        });
                                    //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("Id", selectedId), new KeyValuePair<string, UInt64>("Id", Convert.ToUInt64(t)), dstNode);
                                }
                            }
                            continue;
                        }
                        if (h.Key == "J" || h.Key == "C")
                        {
                            foreach (KeyValuePair <string, object> t in (Dictionary <string, object>)h.Value)
                            {
                                if (lastNodeOfDstHash.Contains(Convert.ToUInt64(t.Value)))
                                {
                                    lock (pathList)
                                        pathList.Add(new List <ulong>()
                                        {
                                            srcNode.Value, selectedId, Convert.ToUInt64(t.Value), dstNode.Value
                                        });
                                    //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("Id", selectedId), t, dstNode);
                                }
                            }
                            continue;
                        }

                        foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                        {
                            foreach (KeyValuePair <string, object> t in h1)
                            {
                                if (t.Key == "AfId")
                                {
                                    continue;
                                }
                                if (lastNodeOfDstHash.Contains(Convert.ToUInt64(t.Value)))
                                {
                                    lock (pathList)
                                        pathList.Add(new List <ulong>()
                                        {
                                            srcNode.Value, selectedId, Convert.ToUInt64(t.Value), dstNode.Value
                                        });
                                    //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("Id", selectedId), (t), dstNode);
                                }
                            }
                        }
                    }
                }
            });
            #endregion
            #region id-auid-afid-auid
            Task threeHop_auidAfidForIdSrc = new Task(() =>
            {
                if (strLAuId.Count == 0)
                {
                    return;
                }
                hashOfLastNodeOfDst.Wait();
                UInt64 MaxCount    = 1000000;
                StringBuilder strL = new StringBuilder("or(" + string.Join(",or(", strLAuId.ToArray()));
                strL.Append(',' + strLAuId.Last().ToString());
                for (int i = 0; i < strLAuId.Count(); i++)
                {
                    strL.Append(')');
                }
                StringBuilder strR = new StringBuilder("or(" + string.Join(",or(", strRAfId.ToArray()));
                strR.Append(',' + strRAfId.Last().ToString());
                for (int i = 0; i < strRAfId.Count(); i++)
                {
                    strR.Append(')');
                }
                StringBuilder str = new StringBuilder($"and({strL.ToString()},{strR.ToString()})");
                magApi mag        = new magApi();
                ArrayList attr    = new ArrayList();
                Dictionary <string, Object> dataJson = null;
                for (int i = 0; i < 10; i++)
                {
                    try
                    {
                        dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "AA.AfId,AA.AuId");
                        break;
                    }
                    catch (Exception ex)
                    {
                        ;
                    }
                }
                attr = ((ArrayList)dataJson["entities"]);
                foreach (Dictionary <string, object> s in attr)
                {
                    foreach (KeyValuePair <string, object> h in s)
                    {
                        if (h.Key == "AA")
                        {
                            foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                            {
                                try
                                {
                                    if (nextNodeOfSrcHash.Contains(Convert.ToUInt64(h1["AuId"])) && lastNodeOfDstHash.Contains(Convert.ToUInt64(h1["AfId"])))
                                    {
                                        lock (pathList)
                                            pathList.Add(new List <ulong>()
                                            {
                                                srcNode.Value, Convert.ToUInt64(h1["AuId"]), Convert.ToUInt64(h1["AfId"]), dstNode.Value
                                            });
                                        ////Console.WriteLine("auidAfId");
                                        //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("AuId", Convert.ToUInt64(h1["AuId"])), new KeyValuePair<string, UInt64>("AfId", Convert.ToUInt64(h1["AfId"])), dstNode);
                                    }
                                }
                                catch
                                { }
                            }
                        }
                    }
                }
            });
            #endregion
            #region auid-afid-auid-id
            Task threeHop_afidAuidForIdAuid = new Task(() =>
            {
                hashOfLastNodeOfDst.Wait();
                if (strLAfId.Count == 0)
                {
                    return;
                }
                UInt64 MaxCount    = 1000000;
                StringBuilder strL = new StringBuilder("or(" + string.Join(",or(", strLAfId.ToArray()));
                strL.Append(',' + strLAfId.Last().ToString());
                for (int i = 0; i < strLAfId.Count(); i++)
                {
                    strL.Append(')');
                }
                StringBuilder strR = new StringBuilder("or(" + string.Join(",or(", strRAuId.ToArray()));
                strR.Append(',' + strRAuId.Last().ToString());
                for (int i = 0; i < strRAuId.Count(); i++)
                {
                    strR.Append(')');
                }
                StringBuilder str = new StringBuilder($"and({strL.ToString()},{strR.ToString()})");
                magApi mag        = new magApi();
                ArrayList attr    = new ArrayList();
                Dictionary <string, Object> dataJson = null;
                for (int i = 0; i < 10; i++)
                {
                    try
                    {
                        dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "AA.AfId,AA.AuId");
                        break;
                    }
                    catch (Exception ex)
                    {
                        ;
                    }
                }
                attr = ((ArrayList)dataJson["entities"]);
                foreach (Dictionary <string, object> s in attr)
                {
                    foreach (KeyValuePair <string, object> h in s)
                    {
                        if (h.Key == "AA")
                        {
                            foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                            {
                                try
                                {
                                    if (nextNodeOfSrcHash.Contains(Convert.ToUInt64(h1["AfId"])) && lastNodeOfDstHash.Contains(Convert.ToUInt64(h1["AuId"])))
                                    {
                                        lock (pathList)
                                            pathList.Add(new List <ulong>()
                                            {
                                                srcNode.Value, Convert.ToUInt64(h1["AfId"]), Convert.ToUInt64(h1["AuId"]), dstNode.Value
                                            });
                                        ////Console.WriteLine("auidAfId");
                                        //Console.WriteLine("3-hop:{0}-{1}-{2}-{3}", srcNode, new KeyValuePair<string, UInt64>("AfId", Convert.ToUInt64(h1["AfId"])), new KeyValuePair<string, UInt64>("AuId", Convert.ToUInt64(h1["AuId"])), dstNode);
                                    }
                                }
                                catch
                                { }
                            }
                        }
                    }
                }
            });
            #endregion
            //3-hop
            if (srcNode.Key == "Id")
            {
                threeHop_str1.Start();
            }
            else
            {
                threeHop_str1_scrAuid.Start();
            }
            if (srcNode.Key == "Id" && dstNode.Key == "AA.AuId")
            {
                threeHop_auidAfidForIdSrc.Start();
            }
            if (srcNode.Key == "AA.AuId" && dstNode.Key == "Id")
            {
                threeHop_afidAuidForIdAuid.Start();
            }
            threeHop_str2.Start();
            if (srcNode.Key == "Id")
            {
                threeHop_str1.Wait();
            }
            else
            {
                threeHop_str1_scrAuid.Wait();
            }
            if (srcNode.Key == "Id" && dstNode.Key == "AA.AuId")
            {
                threeHop_auidAfidForIdSrc.Wait();
            }
            if (srcNode.Key == "AA.AuId" && dstNode.Key == "Id")
            {
                threeHop_afidAuidForIdAuid.Wait();
            }
            threeHop_str2.Wait();
            searchOf2hop.Wait();
            Task.WaitAll();
            HashSet <List <UInt64> > hashPathList = new HashSet <List <ulong> >(pathList, new SortedSetComparer());
            return(hashPathList.ToList());
        }
Example #7
0
        public SortedSet <KeyValuePair <string, UInt64> > getLastNode(KeyValuePair <string, UInt64> sourceNode, ref ArrayList LastNodeAttrOfDst)
        {
            ulong     MaxCount = 1000000;
            ArrayList attr;

            switch (sourceNode.Key)
            {
            case "Id":
            {
                SortedSet <KeyValuePair <string, UInt64> > nodeList = new SortedSet <KeyValuePair <string, ulong> >(new SortedSetComparer());
                ArrayList LastNodeAttrOfDstTemp = null;
                Task      getLastNodeForId_1    = new Task(() =>
                    {
                        ArrayList attrT;
                        magApi mag        = new magApi();
                        StringBuilder str = new StringBuilder("RId=");
                        str.Append(sourceNode.Value.ToString());
                        Dictionary <string, Object> dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "Id,F.FId,C.CId,J.JId,AA.AuId");
                        attrT = ((ArrayList)dataJson["entities"]);
                        LastNodeAttrOfDstTemp = attrT;
                        foreach (Dictionary <string, object> s in attrT)
                        {
                            lock (nodeList)
                                nodeList.Add(new KeyValuePair <string, UInt64>("Id", Convert.ToUInt64(s["Id"])));
                        }
                    });
                Task getLastNodeForId_2 = new Task(() =>
                    {
                        magApi mag = new magApi();
                        ArrayList attrT;
                        StringBuilder str = new StringBuilder("Id=" + sourceNode.Value.ToString());
                        Dictionary <string, Object> dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "F.FId,AA.AuId,J.JId,C.CId");
                        attrT = ((ArrayList)dataJson["entities"]);
                        SortedSet <KeyValuePair <string, UInt64> > nodeListTemp = convertJsonDataToList(attrT);
                        foreach (var s in nodeListTemp)
                        {
                            lock (nodeList)
                                nodeList.Add(s);
                        }
                    });
                getLastNodeForId_1.Start();
                getLastNodeForId_2.Start();
                getLastNodeForId_2.Wait();
                getLastNodeForId_1.Wait();
                LastNodeAttrOfDst = LastNodeAttrOfDstTemp;
                return(nodeList);
            }

            case "AA.AuId":
            {
                StringBuilder str = new StringBuilder("composite(AA.AuId=");
                str.Append(sourceNode.Value.ToString());
                str.Append(')');
                Dictionary <string, Object> dataJson = mag.GetResponse(str: str.ToString(), count: MaxCount, attributes: "Id,AA.AuId,AA.AfId,C.CId,F.FId,J.JId");
                attr = ((ArrayList)dataJson["entities"]);
                LastNodeAttrOfDst = attr;
                SortedSet <KeyValuePair <string, UInt64> > nodeList = new SortedSet <KeyValuePair <string, UInt64> >(new SortedSetComparer());

                foreach (Dictionary <string, object> s in attr)
                {
                    foreach (KeyValuePair <string, object> h in s)
                    {
                        if (h.Key == "logprob")
                        {
                            continue;
                        }
                        if (h.Key == "Id")
                        {
                            nodeList.Add(new KeyValuePair <string, ulong>(h.Key, Convert.ToUInt64(h.Value)));
                            continue;
                        }
                        if (h.Key == "AA")
                        {
                            foreach (Dictionary <string, object> h1 in (ArrayList)h.Value)
                            {
                                if (Convert.ToUInt64(h1["AuId"]) == sourceNode.Value)
                                {
                                    try
                                    {
                                        nodeList.Add(new KeyValuePair <string, ulong>("AA.AfId", Convert.ToUInt64(h1["AfId"])));
                                    }
                                    catch
                                    { }
                                }
                            }
                        }
                    }
                }

                return(nodeList);
            }
            }
            return(null);
        }